0

入力パラメーターとしてユーザー定義型を持つ PXDataBase を介して Acumatica でストアド プロシージャを呼び出すにはどうすればよいですか?

たとえば、次のタイプがあります。

CREATE TYPE [dbo].[string_list_tblType] AS TABLE(
    [RefNbr] [nvarchar](10) NOT NULL,
    PRIMARY KEY CLUSTERED 
(
    [RefNbr] ASC
)WITH (IGNORE_DUP_KEY = OFF)
)
GO

次のストアド プロシージャがあります。

CREATE PROCEDURE [dbo].[GetListOfAPInvoices]
    @APInvoices as string_list_tblType readonly,
AS
BEGIN
    select * from APInvoice a where a.RefNbr in (select RefNbr  from @APInvoices)
END

and following fragment of C# code:

    var par = new SqlParameter("APInvoices", dt);
    par.SqlDbType = SqlDbType.Structured;
    par.TypeName = "dbo.string_list_tblType";
    par.UdtTypeName = "dbo.string_list_tblType";
    par.ParameterName = "APInvoices";

    PXSPParameter p1 = new PXSPInParameter("@APInvoices", PXDbType.Udt, par);
    var pars = new List<PXSPParameter> { p1};

    var results = PXDatabase.Execute(sqlCommand, pars.ToArray());

しかし、C# コードを実行すると、エラー メッセージが表示されます。

UdtTypeName property must be set for UDT parameters

Reflector class でデバッグしたときに、 気づいたPXSqlDatabaseProviderメソッド public override object[] Execute(string procedureName, params PXSPParameter[] pars)

 using (new PXLongOperation.PXUntouchedScope(Thread.CurrentThread))
                {
                    command.ExecuteNonQuery();
                }

command.Parameters.Itemsにはメソッド パラメータがありますが、Udt 型に関連するアイテムは null です。ユーザー定義のテーブル型を渡す方法を知る必要があります。誰もこのアプローチを試しましたか?

4

1 に答える 1