Progress ABL - Что делает ? значит в аргументе метода?

В моем текущем проекте я конвертирую некоторый код Progress в C#. Одно из утверждений для преобразования:

RUN GetNewJobAsmblMultiple IN hIssueReturn(tranType,"?",callProcess,{&input_dataset_SelectedJobAsmblDataSet}, OUTPUT pcMessage, {&output_dataset_IssueReturnDataSet}) NO-ERROR.

Мои вопросы:

  1. Что означает аргумент "?" значит в вызове метода? Каким должен быть для него эквивалентный код C#?
  2. Что означает {&input_dataset_SelectedJobAsmblDataSet} в коде? Это какая-то ссылка? Как это должно быть закодировано на С#?
  3. Я предполагаю, что {&output_dataset_IssueReturnDataSet} является выходной переменной, и, следовательно, в C# я присваиваю ей значения, например: Erp.Tablesets.IssueReturnTableset output_dataset_IssueReturnDataSet = ...

В моем коде до сих пор есть ошибка для «?», Который предположительно является GUID:

Erp.Tablesets.IssueReturnTableset output_dataset_IssueReturnDataSet = hIssueReturn.GetNewJobAsmblMultiple(tranType, "?", callProcess, ref output_dataset_SelectedJobAsmblDataSet, out pcMessage);

SJ


person SJaka    schedule 16.06.2016    source источник


Ответы (3)


"?" строковый литерал с текстовым значением ?

Он отличается от ? (без кавычек), что будет эквивалентно нулевому значению.

{&input_dataset_SelectedPartDataSet} относится к параметру Include file или определению &SCOPED-DEFINE или &GLOBAL-DEFINE где-то еще. Это переменная препроцессора.

person Mike Fechner    schedule 16.06.2016
comment
Я изменил вопрос, правильный аргумент был: {&input_dataset_SelectedJobAsmblDataSet}, хотя я сомневаюсь, что это изменит ваш ответ. - person SJaka; 16.06.2016
comment
Проблема, с которой я сталкиваюсь, заключается в том, что для вызова службы С# (добавленного к вопросу) требуется аргумент System.GUID, а не строка. - person SJaka; 16.06.2016
comment
В какой среде выполняется ваш код? Это в клиенте Progress в Windows, который поддерживает вызовы .NET? - person Mike Fechner; 16.06.2016
comment
Код будет работать в Epicor ERP 10 в среде Windows. - person SJaka; 16.06.2016
comment
Лучшее соответствие перегруженного метода для «Erp.Contracts.IssueReturnSvcContract.GetNewJobAsmblMultiple (string, System.Guid, string, ref Erp.Tablesets.SelectedJobAsmblTableset, out string)» имеет некоторые недопустимые аргументы. - person SJaka; 16.06.2016
comment
Очевидно, что метод ожидает объект System.Guid pcMtlQueueRowID, когда я предоставляю строку. Однако тот же метод в Progress принимает строковый аргумент для «pcMtlQueueRowID». Просто не уверен, что? string означает, что rowID находится в процессе выполнения. - person SJaka; 16.06.2016
comment
В этом случае я предполагаю, что вам придется передать System.Guid:NewGuid() для этого параметра. Я не могу ответить, как ваш другой API ведет себя на ? - поскольку это зависит от фактической реализации API. Если вам нужен GUID в ABL, это просто ключевое слово GUID. Это возвращает GUID как CHARACTER. - person Mike Fechner; 16.06.2016
comment
Это верно в C#, если код выполнения ожидает новый GUID. И здесь я застрял, если? здесь представляет собой новый GUID или что-то еще. - person SJaka; 16.06.2016
comment
Если сеанс ABL поддерживает графический интерфейс для .NET, вы можете использовать System.Guid:NewGuid() из ABL. Но ваш вопрос превратился в то, на что невозможно ответить, не зная фактической реализации этого API в Epicor. - person Mike Fechner; 17.06.2016

Преобразовываете ли вы код, который раньше работал с E9, чтобы теперь он работал с E10?

В E10.1.400 GetNewJobAsmblMultiple определяется как:

    public IssueReturnTableset GetNewJobAsmblMultiple(string pcTranType, Guid pcMtlQueueRowID, string pCallProcess, ref SelectedJobAsmblTableset ds, out string pcMessage)

Чтобы воспроизвести то же поведение, что и E9, передайте Guid.Empty вместо «?». Если у вас есть лицензия AMM и вы передаете допустимый идентификатор GUID для строки MtlQueue, строка MtlQueue будет обработана со строкой ttIssueReturn.

person Stephen Turner    schedule 15.07.2016

На вопрос: 1. Что означает аргумент "?" значит в вызове метода?

Буквальный вопросительный знак (?) используется OpenEdge ABL для обозначения НЕИЗВЕСТНО. Это несколько эквивалентно значению NULL в других базах данных или на других языках. Как и в большинстве языков, строка может быть пустой ("") или NULL (?), и это разные вещи. В отличие от многих языков, всем типам может быть присвоено НЕИЗВЕСТНОЕ значение (?), даже логическое, поэтому логическое логическое значение может быть ?, True или False (т. е. одно из 3 значений).

def var str as char init ?.

message "string is Unknown" (str EQ ?). // TRUE
message "string is empty" (str EQ "").  // FALSE (NULL and EMPTY are different)

def var log as logical init ?.

message "logical is unknown" (log EQ ?).   // TRUE
message "logical is false" (log EQ FALSE). // Logical is neither FALSE
message "logical is true" (log EQ TRUE).   // nor TRUE
person Bitwiii    schedule 20.07.2016