跳转至

SAP集成#

🔒 Administration.ERP

Info

ERP集成是一项单独许可的凯睿德制造软件可选功能。

除了系统集成管理规范之外,SAP集成还有一些特定的定义,必须对其进行配置才能保证该产品正常工作。

ERP(企业资源规划)提供对从和到凯睿德制造软件的SAP集成机制的访问权限。凯睿德制造软件目前提供以下功能:

  1. 将SAP RFC作为常规的凯睿德制造软件服务公开,从而使凯睿德制造软件和凯睿德制造软件应用程序客户可以使用这些RFC。然后可以同步或异步调用这些函数。

  2. 让SAP IDoc在凯睿德制造软件中触发DEE操作。

Warning

为了保证ERP集成正常工作,需要在凯睿德制造软件服务的app.config中配置一些设置,以便建立与SAP的连接。有关详细信息,请参阅《安装指南》中的企业资源规划主题。

中间文档#

intermediate_documents

添加文档映射#

🔒 ERP.NewFromERP

通过关联将处理相应文档的特定DEE操作,可以通过此视图管理配置的文档。按顶部功能区上的按钮,可让用户创建新映射或删除现有映射。通过遵循下面描述的过程,可以让SAP IDoc调用DEE操作

  1. 按功能区中的按钮。
  2. 提供IDoc和DEE操作之间关联的名称和描述。
  3. 提供IDoc的名称 - 该名称必须与在SAP中定义的IDoc名称完全匹配。
  4. 选择要与IDoc关联的DEE操作的名称。

Warning

有必要对SAP进行配置,从而将IDoc交付至特定的RFC服务器,在本例中是凯睿德制造软件服务器。此过程需要特殊的SAP知识和SAP特权。

下面是迭代接收到的IDoc结构的代码示例。其中最重要的输入是Input[Cmf.Foundation.BusinessOrchestration.ErpManagement.InputObjects.ErpRuleExecInput]变量:

//key: Cmf.Foundation.BusinessOrchestration.ErpManagement.InputObjects.ErpRuleExecInput
//value: erpRuleExecInput.ErpDoc

Cmf.Foundation.BusinessOrchestration.ErpManagement.InputObjects.ErpRuleExecInput valueReceived = Input["Cmf.Foundation.BusinessOrchestration.ErpManagement.InputObjects.ErpRuleExecInput"] as Cmf.Foundation.BusinessOrchestration.ErpManagement.InputObjects.ErpRuleExecInput;
if (valueReceived != null)
{
    if (valueReceived.ErpDoc != null &&  valueReceived.ErpDoc.Segments != null)
    {
        Console.WriteLine("Segment number: " + valueReceived.ErpDoc.Segments.Count);
        foreach(var segment in valueReceived.ErpDoc.Segments)
        {
            Console.WriteLine("-"+segment.SegmentName);
            foreach(var field in segment.Fields)
            {
                Console.WriteLine(" . " + field.FieldName + " (" + field.FieldValue+")");
            }

            Console.WriteLine("Field by name (MATNR) value: " + segment.Fields["MATNR"].FieldValue);
            foreach(var innerSegment in segment.ChildSegments)
            {
                Console.WriteLine("    -" + innerSegment.SegmentName);
                foreach(var fieldFromInnerSegment in innerSegment.Fields)
                {
                    Console.WriteLine("     ." +fieldFromInnerSegment.FieldName + "(" + fieldFromInnerSegment.FieldValue+")");
                }
                foreach(var innerInnerSegment in innerSegment .ChildSegments)
                {
                    Console.WriteLine("      -" + innerInnerSegment.SegmentName);
                    foreach(var fieldFromInnerInnerSegment in  innerInnerSegment.Fields)
                    {
                        Console.WriteLine("       ." + fieldFromInnerInnerSegment.FieldName + "(" + fieldFromInnerInnerSegment.FieldValue+")");
                    }
                }
            }
        }
    }
}

对于ERP集成,在DEE操作中,引用一些既有用又必要的命名空间是很重要的:

UseReference("System.dll", "System");
UseReference("Cmf.Foundation.BusinessOrchestration.dll","");
UseReference("Cmf.Foundation.CommunicationLayer.dll","");
UseReference("Cmf.Custom.BusinessObjects.ErpCustomManagement.dll", "Cmf.Custom.BusinessOrchestration.Erp.Generated.InputObjects");
UseReference("Cmf.Custom.BusinessObjects.ErpCustomManagement.dll", "Cmf.Custom.BusinessOrchestration.Erp.Generated.OutputObjects");
UseReference("Cmf.Custom.BusinessObjects.ErpCustomManagement.dll", "Cmf.Custom.BusinessOrchestration.Erp.Generated.Objects");
UseReference("Cmf.Custom.BusinessObjects.ErpCustomManagement.dll", "Cmf.Custom.BusinessOrchestration.Erp.Generated");

删除文档映射#

🔒 ERP.TerminateFromERP

要删除已定义的映射,请按功能区上的按钮,此时将不会再应用映射。

远程函数调用#

🔒 ERP.ManageToERP

可以按照下面所述的步骤公开SAP函数(RFC)。

  1. 远程函数调用视图顶部功能区中的管理RFC按钮。
  2. 在向导中,选择或提供应公开的SAP函数的名称。

    Info

    可以通过输入函数的首字母并按搜索函数名称来搜索特定函数。

  3. 更新按钮完成向导。此向导可能需要一些时间才能完成,因为它需要生成适当的代码、编译代码以及创建和公开服务。

SAP函数在凯睿德制造软件中公开之后,即可通过DEE操作调用它们。在编辑模式下,它们还将出现在DEE操作详细信息的“代码”视图内,在名称空间Cmf.Custom.BusinessObjects.ErpCustomManagement下的可用服务中即可找到。每个函数均将以两种方式显示:

  • 同步
  • 异步 - 带有Async后缀

erp_manage_remote_function_calls

下面是DEE操作调用SAP RFC的示例代码。

// Prepare Z_ST7_ALL_DATA RFC input

Z_ST7_ALL_DATAInput input = new Z_ST7_ALL_DATAInput();

input.AGE = 33;
input.BIRTHDATE = new DateTime(1977, 2, 8);
input.CURRENTDATE = DateTime.Now;
input.ISMARRIED = "T";
input.PERSONSNAME = "Luis";
input.REF_TABLE_ZST7 = new ZST7_ALLTABLECollection();
input.REF_TABLE_ZST7.Add(new ZST7_ALLTABLE(){ DATEOFBIRTH = new DateTime(1977,2,8), HEIGHT = 167, NAME = "Luke Skywalker", TIMEOFBIRTH = new TimeSpan(8,10,00), WAGE = "256", WEIGHT = 68 });
input.REF_TABLE_ZST7.Add(new ZST7_ALLTABLE() { DATEOFBIRTH = new DateTime(1980, 10, 15), HEIGHT = 155, NAME = "Princess Leia", TIMEOFBIRTH = new TimeSpan(10, 10, 00), WAGE = "800", WEIGHT = 50 });

// Call Z_ST7_ALL_DATA RFC

Z_ST7_ALL_DATAOutput output = ErpGeneratedOrchestration.Z_ST7_ALL_DATA(input);