从列表中选择的多个条件不起作用

2020-09-21 21:50发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在使用Business One 9.2 PL03的C#UI和DI API并自定义用户定义的文档(UDT文档+ UDT文档行-> UDO-> UDO表单)。 我将ChooseFromList添加到B1 Studio中的矩阵列,该列按预期工作,但是我还想添加两个条件来过滤显示的行。 如果我分别添加它们,它们会起作用,但是如果我一次添加它们,则不会有任何结果,尽管我在SQL Studio中可以看到该表包含符合条件的行。

此代码添加了条件:

私有无效OnActionTargetPurchaseOrderChooseFromListBefore(ChooseFromListEvent cflEvent)
 {
     尝试
     {
         oForm.Freeze(true);

         如果(cflEvent.ChooseFromListUID.Equals(" ..."))
         {
             字符串cflFormUID = cflEvent.FormUID;
             ChooseFromList cfl = oForm.ChooseFromLists.Item(" ...");
            
            //清除
             条件conds = cfl.GetConditions();
            //静态类变量,在表单加载时设置一次,始终继续为空
             conds.LoadFromXML(PurchaseOrderChooseFromListDefaultConfitionsAsXml);
             cfl.SetConditions(conds);

             = cfl.GetConditions()。GetAsXML();之前的字符串; //用于调试
            
             SBOTools.ChooseFromListAddCondition(oForm," .. CFL"," DocStatus",BoConditionOperation.co_NOT_EQUAL," C");
             如果(cflEvent.Row> -1)
             {
                 Matrix oMatrix =(Matrix)oForm.Items.Item(" ...")。Specific;
                 oMatrix.FlushToDataSource();
                 DBDataSource oDBDataSource = oForm.DataSources.DBDataSources.Item(" ...");
                 字符串cardCode = oDBDataSource.GetValue(" .. CardCode Column",cflEvent.Row-1).Trim();
                 如果(!""。Equals(cardCode))
                 {
                    SBOTools.ChooseFromListAddCondition(oForm," .. CFL"," CardCode",BoConditionOperation.co_EQUAL,cardCode);
                 }
             }
             = cfl.GetConditions()。GetAsXML();之后的字符串; //用于调试
         }
     }
     捕获(异常e)
     {
         Logger.TraceException(e);
     }
     最后
     {
         如果(oForm!= null)
             oForm.Freeze(false);
     }
 } 

ChoiceFromListAddCondition方法:

公共静态void ChooseFromListAddCondition(表格oForm,字符串cflID,字符串别名,BoConditionOperation操作,字符串conditionVal)
 {
     ChooseFromList oCfl = oForm.ChooseFromLists.Item(cflID);
     var条件= oCfl.GetConditions();
     var cond =条件。Add();
     cond.Alias =别名;
     cond.Operation =操作;
     cond.CondVal = conditionVal;
     oCfl.SetConditions(conditions);
 } 

看一下XML,我可以看到在添加之前,条件始终为空,而在两个条件都添加之后。 问题在于"从列表中选择"根本不包含行。 如果仅添加DocStatus或CardCode条件,则列表包含结果。

"从列表中选择"定义:

 
   
     
     ....
     
   
 


 ...

  
   
   
 
 

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在使用Business One 9.2 PL03的C#UI和DI API并自定义用户定义的文档(UDT文档+ UDT文档行-> UDO-> UDO表单)。 我将ChooseFromList添加到B1 Studio中的矩阵列,该列按预期工作,但是我还想添加两个条件来过滤显示的行。 如果我分别添加它们,它们会起作用,但是如果我一次添加它们,则不会有任何结果,尽管我在SQL Studio中可以看到该表包含符合条件的行。

此代码添加了条件:

私有无效OnActionTargetPurchaseOrderChooseFromListBefore(ChooseFromListEvent cflEvent)
 {
     尝试
     {
         oForm.Freeze(true);

         如果(cflEvent.ChooseFromListUID.Equals(" ..."))
         {
             字符串cflFormUID = cflEvent.FormUID;
             ChooseFromList cfl = oForm.ChooseFromLists.Item(" ...");
            
            //清除
             条件conds = cfl.GetConditions();
            //静态类变量,在表单加载时设置一次,始终继续为空
             conds.LoadFromXML(PurchaseOrderChooseFromListDefaultConfitionsAsXml);
             cfl.SetConditions(conds);

             = cfl.GetConditions()。GetAsXML();之前的字符串; //用于调试
            
             SBOTools.ChooseFromListAddCondition(oForm," .. CFL"," DocStatus",BoConditionOperation.co_NOT_EQUAL," C");
             如果(cflEvent.Row> -1)
             {
                 Matrix oMatrix =(Matrix)oForm.Items.Item(" ...")。Specific;
                 oMatrix.FlushToDataSource();
                 DBDataSource oDBDataSource = oForm.DataSources.DBDataSources.Item(" ...");
                 字符串cardCode = oDBDataSource.GetValue(" .. CardCode Column",cflEvent.Row-1).Trim();
                 如果(!""。Equals(cardCode))
                 {
                    SBOTools.ChooseFromListAddCondition(oForm," .. CFL"," CardCode",BoConditionOperation.co_EQUAL,cardCode);
                 }
             }
             = cfl.GetConditions()。GetAsXML();之后的字符串; //用于调试
         }
     }
     捕获(异常e)
     {
         Logger.TraceException(e);
     }
     最后
     {
         如果(oForm!= null)
             oForm.Freeze(false);
     }
 } 

ChoiceFromListAddCondition方法:

公共静态void ChooseFromListAddCondition(表格oForm,字符串cflID,字符串别名,BoConditionOperation操作,字符串conditionVal)
 {
     ChooseFromList oCfl = oForm.ChooseFromLists.Item(cflID);
     var条件= oCfl.GetConditions();
     var cond =条件。Add();
     cond.Alias =别名;
     cond.Operation =操作;
     cond.CondVal = conditionVal;
     oCfl.SetConditions(conditions);
 } 

看一下XML,我可以看到在添加之前,条件始终为空,而在两个条件都添加之后。 问题在于"从列表中选择"根本不包含行。 如果仅添加DocStatus或CardCode条件,则列表包含结果。

"从列表中选择"定义:

 
   
     
     ....
     
   
 


 ...

  
   
   
 
 
付费偷看设置
发送
2条回答
大圣 - sap领域执行人,9年sap运营经验
1楼 · 2020-09-21 21:59.采纳回答

嗨,嗨

您缺少cond.Relationship属性,无法添加多个条件

以下摘录了2个条件:

 Dim oCons as SAPbouiCOM.Conditions = cfl.GetConditions
             Dim oCon as SAPbouiCOM.Condition = oCons.Add
             oCon.BracketOpenNum = 2
             oCon.Alias ="已锁定"
             oCon.Operation = SAPbouiCOM.BoConditionOperation.co_EQUAL
             oCon.CondVal =" N"
             oCon.BracketCloseNum = 1
             oCon.Relationship = BoConditionRelationship.cr_AND


             oCon = oCons.Add
             oCon.BracketOpenNum = 1
             oCon.Alias =" DimCode"
             oCon.Operation = BoConditionOperation.co_EQUAL
             oCon.CondVal = 1
             oCon.BracketCloseNum = 2
 

关于
Edy

Haoba3210
2楼-- · 2020-09-21 22:10

谢谢!

一周热门 更多>