PowerBuilder(PFC)引用数据窗口属性时崩溃-当TFS未提取数据对象时



当分配的数据对象丢失(在构建或开发中(时,使用PowerBuilder基础类(PFC(的人是否遇到过应用程序崩溃?

我们都经历过这样的情况:数据对象是动态分配的,而您在期望数据的地方得到了一个空白的数据窗口。这种情况不同,在开发和编译的情况下,PFC代码都会因空对象引用而崩溃。

当一个全新的数据对象被添加到窗口中,但由于某种原因,TFS未能将新对象下拉到构建机器时,就会出现这种情况。我不知道是我们的构建人员不知道自己在做什么,还是TFS失败——倾向于后者。这是另一个问题——如果有人知道解决方案,我们将不胜感激。

由于当分配给数据窗口控件的数据对象丢失时,PFC在许多地方崩溃,我倾向于认为有人已经通过修复PFC解决了这个问题。

测试用例:

数据窗口控件dw_1数据对象dw_new_Dataobject是全新的,而我们的构建器没有它代码看起来像dw_1.dataobject="dw_new_dataobject"(不是动态分配(

我们尝试了什么

我们尝试过IsNull(idw_requestor.object.datawindow.help.command(或IsNull(idw_requestor.object.ddatawindow(,但没有成功。即使这样做了,我们也需要将PFC中与数据窗口属性相关的每个点表示法赋值都封装起来。

我应该知道如何解决这个问题,但还是一片空白。有没有一个简单的编码检查可以用来验证分配的数据对象是否存在于构建中,如果不能优雅地处理问题?

理想情况下,类似于以下伪代码:

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错误:对象的函数_setstyle中…处的对象引用为Null。。。

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

试试这个:

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返回一个空字符串。

现有数据窗口的描述返回列计数和颜色的数值。

我在TFS中也经历过同样的行为。我对可以将新对象从TFS拉到本地计算机感到满意的唯一方法是手动验证。

我们使用的流程是在向源代码管理添加新对象时通知所有团队成员(这是创建新对象的开发人员的责任(
然后我会从TFS刷新我的工作区,然后转到添加到的每个pbl。
如果对象丢失,我会手动创建一个相同类型的"stub"对象(datawindow对象、nvo等(,然后再次刷新。这通常会将源从TFS下拉到我的本地计算机。

最新更新