Sage BOI - Ошибка 200 при вызове NewObject для AR_Customer_bus. Я стремлюсь создать нового клиента через BOI, используя C# - PullRequest
0 голосов
/ 28 февраля 2020

Это вопрос интерфейса бизнес-объектов облака Sage 2019.

У меня возникают проблемы при попытке создать объект AR_Customer_bus, моя конечная цель - создать нового клиента с помощью BOI. Я получаю ошибку 200.

Полное раскрытие; Я новичок в Sage BOI, хотя я довольно опытный разработчик и у меня нет опыта Sage, но у меня есть учебные материалы по Sage BOI. Я также разместил этот вопрос на форуме Sage, но активность на форумах довольно низкая, поэтому я освещаю свои базы: https://www.sagecity.com/support_communities/sage100_erp/f/sage-100-business-object-interface/146142/unable-to-newobject-the-ar_customer_bus

Любая помощь в этом вопросе очень ценится , это даже не должно быть точным решением, просто было бы очень полезно просто общее руководство, которое могло бы помочь облегчить решение.

Пока это мой код, также обратите внимание, что я списал это с Вот несколько примеров, которые я нашел на своем пути:

/// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {

            // Instantiate a ProvidexX.Script object and initialize with the path to MAS90\Home
            using (DispatchObject pvx = new DispatchObject("ProvideX.Script"))
            {
                // Replace the text "*PATH TO MAS90\HOME*" with the correct MAS90\Home path in the line below
                pvx.InvokeMethod("Init", @"[Correct path]");

                // Instantiate a new Session object and initialize the session
                // by setting the user, company, date and module
                using (DispatchObject oSS = new DispatchObject(pvx.InvokeMethod("NewObject", "SY_Session")))
                {
                    oSS.InvokeMethod("nLogon");
                    oSS.InvokeMethod("nSetUser", new object[] {"[Username]", "[Password]"});
                    oSS.InvokeMethod("nSetCompany", "[CompanyName]");
                    oSS.InvokeMethod("nSetDate", "A/R", "05312006");
                    oSS.InvokeMethod("nSetModule", "A/R");

                    // Get the Task ID for the AR_Customer_ui program
                    int TaskID = (int) oSS.InvokeMethod("nLookupTask", "AR_Customer_ui");
                    //int TaskID = (int)oSS.InvokeMethod("nLookupTask", "AR_Invoice_ui");
                    oSS.InvokeMethod("nSetProgram", TaskID);

                    CreateCustomer(pvx, oSS, out var customerNumber);
                    GetCustomerList(pvx, oSS, out var bob);

                }
            }


        }

        private static string CreateCustomer(DispatchObject pvx, DispatchObject oSS, out string customerNumber)
        {
            customerNumber = "";


            using (DispatchObject oARCustomerEntry = new DispatchObject(pvx.InvokeMethod("NewObject", "AR_Customer_bus", oSS.GetObject()))) //Error 200 throw here.
            {
                try
                {
                    object[] nextCustomerNumber = new object[] { "CustomerNo$" };

                    //Getting Next Customer Number
                    oARCustomerEntry.InvokeMethodByRef("nGetNextCustomerNo", nextCustomerNumber);

                    Console.WriteLine(nextCustomerNumber[0].ToString());

                    object retVal = 0;

                    retVal = oARCustomerEntry.InvokeMethodByRef("nSetKeyValue", new object[] { "ARDivisionNo$", "01" });
                    retVal = oARCustomerEntry.InvokeMethodByRef("nSetKeyValue", new object[] { "CustomerNo$", nextCustomerNumber[0].ToString() });
                    retVal = oARCustomerEntry.InvokeMethod("nSetKey");

                    Console.WriteLine(retVal.ToString());

                    retVal = oARCustomerEntry.InvokeMethodByRef("nSetValue", new object[] { "CustomerName$", "ROSE DAWSON" });
                    retVal = oARCustomerEntry.InvokeMethodByRef("nSetValue", new object[] { "AddressLine1$", "1234 LONG DREAM ST" });
                    retVal = oARCustomerEntry.InvokeMethodByRef("nSetValue", new object[] { "AddressLine2$", "" });
                    retVal = oARCustomerEntry.InvokeMethodByRef("nSetValue", new object[] { "AddressLine3$", "" });
                    retVal = oARCustomerEntry.InvokeMethodByRef("nSetValue", new object[] { "City$", "CITRUS HEIGHTS" });
                    retVal = oARCustomerEntry.InvokeMethodByRef("nSetValue", new object[] { "State$", "CA" });

                    Console.WriteLine(retVal.ToString());

                    retVal = oARCustomerEntry.InvokeMethodByRef("nSetValue", new object[] { "ZipCode$", "95621" });
                    retVal = oARCustomerEntry.InvokeMethodByRef("nSetValue", new object[] { "CountryCode$", "USA" });
                    retVal = oARCustomerEntry.InvokeMethodByRef("nSetValue", new object[] { "SalespersonDivisionNo$", "01" });
                    retVal = oARCustomerEntry.InvokeMethodByRef("nSetValue", new object[] { "SalespersonNo$", "RAP" });
                    Console.WriteLine(retVal.ToString());

                    retVal = oARCustomerEntry.InvokeMethod("nWrite");

                    if (retVal.ToString() == "0")
                    {
                        object errorMsg = oARCustomerEntry.GetProperty("sLastErrorMsg");
                        Console.WriteLine(errorMsg.ToString());
                        Console.Read();
                    }

                    customerNumber = nextCustomerNumber[0].ToString();

                    Console.WriteLine(retVal.ToString());

                    Console.Read();
                }
                catch (Exception ex)
                {
                    object errorMsg = oARCustomerEntry.GetProperty("sLastErrorMsg");

                    Console.WriteLine(errorMsg.ToString());
                    Console.WriteLine(ex.Message);
                    Console.Read();
                }
                finally
                {
                    oARCustomerEntry.Dispose();
                }
            }

            return customerNumber;
        }

Ниже приведена строка, которая выдает ошибку:

public object GetObject() 
    {
        return m_object;
    }

Затем он вызывает InvokeMethod, который показан ниже, это именно там, где выдается ошибка 200:

public object InvokeMethod(string sMethodName, params object[] aryParams)
    {
        return m_object.GetType().InvokeMember(sMethodName, m_flgMethod, null, m_object, aryParams);
    }

Мои первые мысли были о том, что это проблема с разрешениями (поскольку я сталкивался с этим раньше, но пользователь, которого я настраиваю, имеет роль «Полный администратор», которая глядя на раздел обслуживания ролей sage, я вижу, что роли назначены все разрешения безопасности.

Обратите внимание: я смог обновить другие бизнес-объекты, такие как AR_DepositHistory_bus, без проблем, и мне также удалось обновить AR_Customer_ui и AR_Customer_sv c, поэтому я не знаю, почему это проблема.

1 Ответ

0 голосов
/ 03 марта 2020

Вот решение, которое сработало для меня

Решение 1 Потребовалось некоторое время, чтобы решить эту проблему блокировки, но вот решение, которое сработало для меня:

  1. Я взял сценарий VB, предоставленный Дэвидом Спеком в приведенном выше URL-адресе, и сделал несколько модификаций для его работы в VB. net, я опубликовал полный сценарий с изменениями по ссылке выше.
  2. Я запустил сценарий и обнаружил, что смог без проблем создать новый объект AR_Customer_bus.
  3. Работая по рекомендации, предоставленной Дэвидом Спеком в URL, я снова проверил свое приложение C# и обнаружил, что это сработало.

Альтернативное решение

  1. Я полагаю, что следование совету Sage100User также решило бы проблему. Ссылка здесь В статье показано, как вручную зарегистрировать файлы DLL.

Причина Причиной может быть несколько вещей:

  1. Sage работал на машине Windows 2012 (иногда это вызывает проблемы с BOI).
  2. Мы используем Avatax в нашей компании, которая, как известно, также вызывает проблемы с BOI.
  3. Скорее всего, это действительная причина, по которой я не смог обновить AR_Customer_bus, а именно то, что я не верю, что .dll правильно зарегистрированы на моей рабочей станции.

Я очень надеюсь это помогает другим, которые сталкиваются с этой же проблемой, насколько я понимаю, это довольно распространенная проблема, решение которой заняло много времени.

...