GP Web Services创建Item问题:ItemType设置不生效
嘿,这个问题我之前帮开发者排查过,核心原因其实很明确:你用的CreateSalesItem()方法本身就是专门为创建销售库存类型(ITEMTYPE=1)的项目设计的——它的内部逻辑会强制把IV00101表的ITEMTYPE字段设为1,完全忽略你传入的SalesItem对象里的ItemType值。除了事后用SQL更新的临时方案,还有几个更合理的解决办法:
改用通用的库存项创建方法
放弃CreateSalesItem(),转而使用CreateInventoryItem()方法。这个方法是通用的库存项创建接口,支持设置任意合法的ItemType值。你需要把原来的SalesItem对象转换为InventoryItem实例(或者直接构建InventoryItem对象),在其中明确设置ItemType属性为你需要的数值(比如2代表采购库存、3代表非库存项目等),再调用该方法。这样数据库里的ITEMTYPE字段就会正确存储你指定的值。直接使用eConnect XML节点(若基于eConnect开发)
如果你是通过eConnect框架进行开发,可以直接构造IVItemMasterType的XML节点,在节点中手动指定<ITEMTYPE>标签的数值,然后调用eConnect的处理方法。这种方式绕过了封装好的专用方法,能完全控制所有字段的赋值,不会被硬编码的逻辑覆盖。检查Policy对象的配置
有时候传入的Policy实例可能会限制字段的可修改性,甚至强制设置默认值。你可以用Policy.GetPolicyByClass()方法获取对应类的默认策略,检查其中是否把ItemType字段设为只读或者绑定了固定默认值,必要时调整Policy的配置。
内容的提问来源于stack exchange,提问作者Ryan Raten Kuhar

