首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Epicor之外访问Epicor10业务对象中的UD字段?

如何在Epicor之外访问Epicor10业务对象中的UD字段?
EN

Stack Overflow用户
提问于 2016-11-14 20:04:02
回答 2查看 2.6K关注 0票数 1

在Epicor 9中,打开Visual并创建一个项目并使用Epicor库访问其Business (BOs)相当容易。因此,例如,可以通过包含库Epicor.Mfg.Part和创建一个部件对象来访问该部件。然后,通过调用Part.GetByID("partnum");很容易获得一个部件的信息。这将返回一个PartDataSet。

在Epicor 10中做同样的事情不一样,但是我注意到PartDataSet不包含任何UD字段,甚至是在Epicor10中正确设置的UD字段。

当通过业务对象访问Epicor 10时,如何访问UD字段?

编辑:

代码语言:javascript
复制
using Erp.BO;
using Erp.Proxy.BO;

// ...

var binding = Epicor.ServiceModel.StandardBindings.NetTcp.UsernameWindowsChannel();

var cc = new ClientCredentials();
var cred = cc.UserName;
cred.UserName = "****";
cred.Password = "****";
DnsEndpointIdentity ep = new DnsEndpointIdentity("****");

var quoteBo = new QuoteImpl(binding, new Uri("net.tcp://****/Erp/BO/Quote.svc"), cc, ep);

var qds = new QuoteDataSet();
var hed = qds.QuoteHed.NewQuoteHedRow(); // type: QuoteDataSet.QuoteHedRow

// I am not getting UserDefinedColumns as a member of hed.
// This gives me a compiler error.
qds.QuoteHed[0].UserDefinedColumns["Custom_c"] = "value";
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-21 09:08:01

这仍然相当容易,调用BO返回的DS将在客户端和服务器上找到的契约DLL中定义,因为该文件需要分发到客户端机器-- UD字段不添加到它。它会导致太多的客户端更新。

这意味着Visual无法查看合同程序集以确定字段名。相反,您可以使用columnName索引器(即:

代码语言:javascript
复制
class Program
{
    static void Main(string[] args)
    {
        // Hard-coded LogOn method 
        // Reference: Ice.Core.Session.dll
        Ice.Core.Session session = new Ice.Core.Session("manager", "manager", "net.tcp://AppServer/MyCustomerAppserver-99999-10.0.700.2");

        // References: Epicor.ServiceModel.dll, Erp.Contracts.BO.ABCCode.dll
        var abcCodeBO = Ice.Lib.Framework.WCFServiceSupport.CreateImpl<Erp.Proxy.BO.ABCCodeImpl>(session, Erp.Proxy.BO.ABCCodeImpl.UriPath);

        // Call the BO methods
        var ds = abcCodeBO.GetByID("A");
        var row = ds.ABCCode[0];

        System.Console.WriteLine("CountFreq is {0}", row.CountFreq);
        System.Console.WriteLine("CustomField_c is {0}", row["CustomField_c"]);
        System.Console.ReadKey();
    }
}

UserDefinedColumns是在Epicor.ServiceModel中定义的,但由于它是Erp.Tablesets.QuoteHedRow继承的Ice.IceRow的内部属性,因此无法访问。

票数 2
EN

Stack Overflow用户

发布于 2016-11-16 23:24:18

当您找到要查找的特定记录,并且有一个包含记录所有列的对象时,您应该会看到一个名为UserDefinedColumns的附加对象。它的工作方式类似于<string, object>类型的二叉树。因此,例如,要设置一个值,您可以执行如下操作:

代码语言:javascript
复制
myPartDs.Part[0].UserDefinedColumns["MyUdColumn_c"] = "some value";

如果需要提取值,则必须将其解析为所需的任何类型,因为它们是作为对象存储的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40596915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档