有没有人使用PowerBuilder Foundation Classes(PFC)在分配的数据对象丢失时(在构建或开发中)遇到应用程序崩溃?
我们在动态分配数据对象时遇到了所有经历,并且您获得了预期数据的空白数据窗口。这种情况不同,PFC代码在开发和编译的情况下都与空对象引用崩溃。
当一个全新的数据对象被添加到窗口时出现这种情况,但由于某种原因,TFS无法将新对象下拉到构建机器。我不知道是不是我们的建筑人不知道他们在做什么,或TFS失败 - 倾向于后者。这是另一个问题 - 如果有人知道解决方案,我们将非常感激。
由于当分配给数据窗口控件的数据对象丢失时PFC在许多地方崩溃 - 我倾向于认为有人通过修复PFC解决了这个问题。
测试用例:
数据窗口控件dw_1 Dataobject dw_new_dataobject是全新的,我们的构建者没有它 代码看起来像dw_1.dataobject =' dw_new_dataobject' (不是动态分配)
我们尝试了什么?
我们尝试过IsNull(idw_requestor.object.datawindow.help.command)或IsNull(idw_requestor.object.datawindow)但没有运气。即使这确实有效,我们也需要在PFC中包含与datawindow属性相关的每个点符号赋值。
我应该知道如何解决这个问题但是要画一个空白。是否有一个简单的编码检查,我们可以用来验证构建中是否存在已分配的数据对象,如果不能正常处理问题?
理想情况下就像这样的伪代码:
If dw_1.databoject = 'dw_new_object' And
'dw_new_object' is nowhere to be found Then
// handle somewhat gracefully and kill the app
End If
对象:pfc_n_cst_dwsrv_sort 错误:对象的函数of_setstyle中的空对象引用...
PFC代码(许多失败点之一):
// Check to see if the passed style number is valid.
IF IsNull(ai_style) THEN
Return -1
End If
CHOOSE CASE ai_style
CASE DEFAULT, DRAGDROP, SIMPLE, DROPDOWNLISTBOX
ii_style = ai_style
if ii_style = DEFAULT then
if isValid (idw_requestor) then
if len (idw_requestor.dataobject) > 0 then
// NULL OBJECT REFERENCE LINE BELOW when dataobject gone
idw_requestor.object.datawindow.help.command = 1
idw_requestor.object.datawindow.help.file = "pfcdlg.hlp"
idw_requestor.object.datawindow.help.typeid.setsort = "1200" idw_requestor.object.datawindow.help.typeid.setsortexpr = "800"
end if
end if
end if
Return 1
END CHOOSE
答案 0 :(得分:2)
试试这个:
string ls_rc
datastore lds_test
lds_test = create datastore
lds_test.dataobject = "ThisIsReallyNotDatawindowName"
ls_rc = lds_test.Describe("DataWindow.Column.Count") // Returns ""
ls_rc = lds_test.Describe("DataWindow.Color") // Returns ""
lds_test.dataobject = "dw_import" // Use the name of an existing datawindow.
ls_rc = lds_test.Describe("DataWindow.Column.Count") // Returns arbitrary number
ls_rc = lds_test.Describe("DataWindow.Color") // Returns arbitrary number
destroy lds_test
您会注意到不存在的数据窗口会从Describe中返回一个空字符串。
描述现有数据窗口返回列数和颜色的数值。
答案 1 :(得分:1)
我在TFS中遇到过同样的行为。我唯一能够将新对象从TFS拉到我的本地机器的方法是手动验证。
我们使用的过程是在将新对象添加到源控件时通知所有团队成员(这是创建新对象的开发人员的责任)。
然后我会从TFS刷新我的工作区,然后转到添加到的每个pbl
如果对象丢失,我会手动创建一个相同类型的“stub”对象(datawindow对象,nvo等),然后再次刷新。这通常会将源从TFS拉到我的本地机器。