入力パラメーターとしてユーザー定義型を持つ 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 です。ユーザー定義のテーブル型を渡す方法を知る必要があります。誰もこのアプローチを試しましたか?