외부 API 소스의 항목을 Acumatica의 레코드로 가져 오는 프로세스를 만들고 있습니다.프로세스 그래프에서 언 바운드 DAC 사용 처리 기능이 작동하지 않습니다.
외부 API에서 사용할 수있는 항목을 나타내는 데 사용되는 언 바운드 DAC를 만들었습니다.
프로세스 그래프에서 기본보기의 대리인을 생성하여 ResultSet (일반적으로 API 데이터에서 생성)을 생성하고 반환합니다. 그런 다음 사용자가 가져올 항목을 선택할 수 있도록 항목을 표시하는 격자보기로이 그래프에 바인딩 된 화면을 가져옵니다. 그러면 주 프로세스 대리인이 선택한 항목에 대한 Acumatica의 레코드를 만듭니다.
public class ImportItemsProcess : PXGraph<ImportItemsProcess>
{
public PXProcessing<ImportItem> ImportItems;
public PXCancel<ImportItem> Cancel;
public ImportItemsProcess()
{
ImportItems.SetProcessCaption("Import");
ImportItems.SetProcessAllCaption("Import All");
ImportItems.SetProcessDelegate(ProcessImportItems);
}
protected virtual IEnumerable importItems(PXAdapter adapter)
{
PXResultset<ImportItem> items = new PXResultset<ImportItem>();
/* Would create ImportItems from external API data here */
items.Add(new PXResult<ImportItem>(new ImportItem() { RefNbr = "1" }));
items.Add(new PXResult<ImportItem>(new ImportItem() { RefNbr = "2" }));
items.Add(new PXResult<ImportItem>(new ImportItem() { RefNbr = "3" }));
return items;
}
public static void ProcessImportItems(List<ImportItem> importItems)
{
throw new PXException("ProcessImportItems() has been called");
}
}
그리고 ASPX 페이지 : 여기 프로세스 대리인이 호출되지 않습니다 단순화 된 예로서 작성
<asp:Content ID="cont1" ContentPlaceHolderID="phDS" runat="Server">
<px:PXDataSource ID="ds" runat="server" Visible="True" Width="100%" PrimaryView="ImportItems" TypeName="APIImporter.ImportItemsProcess" >
</px:PXDataSource>
</asp:Content>
<asp:Content ID="cont2" ContentPlaceHolderID="phL" runat="Server">
<px:PXGrid ID="grid" runat="server" Height="400px" Width="100%" Style="z-index: 100"
AllowPaging="True" AllowSearch="True" AdjustPageSize="Auto" DataSourceID="ds" SkinID="Primary" TabIndex="1500" TemporaryFilterCaption="Filter Applied">
<Levels>
<px:PXGridLevel DataMember="ImportItems">
<RowTemplate>
<px:PXCheckBox ID="edSelected" runat="server" AlreadyLocalized="False" DataField="Selected" Text="Selected" CommitChanges="true">
</px:PXCheckBox>
<px:PXTextEdit ID="edRefNbr" runat="server" AlreadyLocalized="False" DataField="RefNbr" DefaultLocale="">
</px:PXTextEdit>
</RowTemplate>
<Columns>
<px:PXGridColumn DataField="Selected" TextAlign="Center" Type="CheckBox" Width="60px" CommitChanges="true">
</px:PXGridColumn>
<px:PXGridColumn DataField="RefNbr">
</px:PXGridColumn>
</Columns>
</px:PXGridLevel>
</Levels>
<AutoSize Container="Window" Enabled="True" MinHeight="200" />
</px:PXGrid>
</asp:Content>
. 나는 프로세스 버튼을 클릭 할 때 무언가가 있다고 생각한다. 서버 콜백은 ImportItem 객체의리스트를 다시 만드는 뷰의 델리게이트 함수를 실행하고 포스트 백에서 새롭게 생성 된 객체를 프레임 워크와 연관시킬 수 없다. 키 필드없이 그러나, 나는이 DAC의 RefNbr에 ISKEY 속성 ...
[PXString(IsKey = true)]
[PXUIField(DisplayName = "External Ref Nbr")]
public string RefNbr { get; set; }
를 추가하면 ... 내가 바로 메시지와 함께 라인 레벨의 에러를 제공하고있어 화면의 항목을 선택 이제 "오류 : 인수가 범위를 벗어났습니다 매개 변수 이름 : table ".
나는 추상적 인 BQL 클래스로 시도해 본 결과는 같습니다. 원본 게시물을 클래스 및 ASPX 페이지로 업데이트했습니다. –
나는 주된 문제는 언 바운드 DAC라고 생각한다. ImportItem 바꾸기 : ImportItem에 의해 IB5Table : SOShipment 및 대리인 '반환 선 PXSelect.Select (이)에서이 줄만 데 프로세스 위임을 호출합니다. –
오해의 소지가 있지만 작동하지 않습니다. ImportItem 클래스가 SOShipment에서 파생되면 데이터베이스의 모든 SO Shipment에 대해 객체 (그리드의 행)가 생성됩니다. 이 단계에서는 기존 레코드와 아무 관련이 없습니다. API 호출을 통해 검색된 데이터에서 레코드 개체를 만들어야합니다. 뷰의 위임에서 캐시를 지우고 'PXSelect 반환.'을 선택하기 전에 수동으로 생성 된 개체로 채 웁니다. 그러나 그 중 하나도 행운이 아닙니다. –