【问题标题】:C# with NAV Dynamics web services inserting enum type object使用 NAV Dynamics Web 服务插入枚举类型对象的 C#
【发布时间】:2017-03-15 15:49:26
【问题描述】:

假设我有 NAV 动态的网络服务

在 Web 服务内部有一些业务对象,其中之一是枚举类型

public Type Type {
            get {
                return this.typeField;
            }
            set {
                this.typeField = value;
            }
        }

并且具有以下对象的值,这些对象也包含在 Web 服务中

public enum Type{

        /// <remarks/>
        _blank_,

        /// <remarks/>
        G_L_Account,

        /// <remarks/>
        Item,

        /// <remarks/>
        Fixed_Asset,

        /// <remarks/>
        Charge_Item,
    }

情况是在下面做这个方法的时候

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using NAVDomain;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using LocalDomain;
using NAVFacade.GoodReturnNAVService;

public bool SaveData(PurchCrdMemoNav objHd, List<Purch_Cr_Memo_Line> objDt)
            {
                PurchCrdMemoNav_Service service = new PurchCrdMemoNav_Service();
                NetworkCredential cred = new NetworkCredential();
                try
                {
                    cred.UserName = ConfigurationManager.AppSettings["NAVUser3"];
                    cred.Password = ConfigurationManager.AppSettings["NAVPassword3"];
                    cred.Domain = ConfigurationManager.AppSettings["NAVDataSource3"];

                    service.Credentials = cred;

                    PurchCrdMemoNav DataSave = new PurchCrdMemoNav();
                    DataSave.No = objHd.No;

                    service.Create(ref DataSave);

                    var purch = service.Read(objHd.No);

                    DataSave.Buy_from_Vendor_No = objHd.Buy_from_Vendor_No;
                    DataSave.Buy_from_Vendor_Name = objHd.Buy_from_Vendor_Name;
                    DataSave.Applies_to_Doc_Type = objHd.Applies_to_Doc_Type;
                    DataSave.Applies_to_Doc_No = objHd.Applies_to_Doc_No;
                    DataSave.Location_Code = objHd.Location_Code;
                    DataSave.Posting_Date = objHd.Posting_Date;

                    DataSave.Key = purch.Key;

                    service.Update(ref DataSave);

                    DataSave.PurchLines = new Purch_Cr_Memo_Line[objHd.PurchLines.Count()];



                    for (int i = 0; i < objHd.PurchLines.Count(); i++)
                    {
                        DataSave.PurchLines[i] = new Purch_Cr_Memo_Line();
                        DataSave.PurchLines[i].Document_Type = Document_Type.Credit_Memo;
                        DataSave.PurchLines[i].Document_No = objHd.No;
                        DataSave.PurchLines[i].Type = NAVFacade.GoodReturnNAVService.Type.Item;
                        DataSave.PurchLines[i].No = objHd.PurchLines[i].No;  
                        DataSave.PurchLines[i].Description = objHd.PurchLines[i].Description;
                        DataSave.PurchLines[i].Unit_of_Measure = objHd.PurchLines[i].Unit_of_Measure;
                        DataSave.PurchLines[i].Quantity = objHd.PurchLines[i].Quantity;
                    }

                    service.Update(ref DataSave);

                    return true;
                }
                catch (Exception err)
                {
                    MsgCode = 99;
                    MsgDesc = err.Message;
                    return false;
                }
            }

问题是在循环之后执行service.Update(ref DataSave) 它捕捉到一个错误,它说

表采购行的字段编号包含在相关表(标准文本)中找不到的值(C125)。

因为在NAV中,保存这一笔交易时,需要检查其下方该对象中记录的每一项的项目类型

DataSave.PurchLines[i].Type = NAVFacade.GoodReturnNAVService.Type.Item;

我已经完成了调试,在 DataSave.PurchLines[i].Type 里面,有值为 Item 的数据

但是当我检查数据库时,数据没有保存

在 NAV 中,对象读取为选项,在 SQL 中,对象读取为整数

请帮忙,

我有点卡在这里 因为除了这个方法之外,我的代码上的任何东西都可以工作

真诚的,

只是另一个中核初级开发人员

【问题讨论】:

    标签: c# web-services microsoft-dynamics


    【解决方案1】:

    也许你的值没有正确发送,检查是否有属性 "YourField"_Specified 并将其设置为 true...

    前: ...

        currWorkOrder.Order_Type = Order_Type.AKC; //(Order_Type)2;
        currWorkOrder.Order_TypeSpecified = true;
    

    ... 当我不设置时

        Order_TypeSpecified = true; 
    

    插件发送默认值,所以 0...

    【讨论】:

      【解决方案2】:

      是的,NAV 中的 Type 字段是一个 Option 字段,但它存储为 Integer,因此您需要给它一个数值。 请咨询实际数据库的 NAV 开发人员,但默认值为: " ,G/L Account,Item,,Fixed Asset,Charge (Item)" - 它从 0 开始,所以如果你想要 Item,你需要 2

      希望对你有帮助!

      干杯

      【讨论】:

      • 请问如何,我在这里简直是新手,我将容器更改为业务对象为整数并给出关于列 (x, y) 类型数据 bla bla 的另一个捕获
      • 您不能通过 Visual studi 生成的代理发送 int,因为该字段是枚举...
      猜你喜欢
      • 2014-07-14
      • 2023-03-09
      • 2014-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 2010-09-24
      相关资源
      最近更新 更多