In the report designer, users are able to design the report based on the source which was pre-filled. The user really did not have any control over the structure of their source. The source has always been filtered and controlled by Uniconta. User had to design the report with reference to the source.
But now with this new feature of custom-source reporting, the user not only can design the report but also can create the structure of data source. This feature is applicable to Simple reports and Special reports like Invoice, Order Confirmation, Requisition and so on.
User can create the custom source report from within the application using the standard wizard or user can program in their own user plugins to create and design both layout of report and structure of the data source.
- Create Custom-Source Report
-
-
- Type: Table type on which report is to be made.
- Source name: User can give some name to the source which would be displayed on the field list.
- Report: It’s for which report type.
- If User select Plugins option as the source provider then to define his source he has to provide four parameters
- User Assembly: Specify the user assembly created by the user. It will list out all the assemblies loaded
- Type: Provide the type defined in the user assembly.
- Source name: Name for the source.
- Reports: Type of the report which is to be created.
- Here it will populate the list of types available in the plugin. So as an example, we have created two classes namely DebtorExteded and DebtOrder
- Inside the plugin DLL, we have two classes DebtorExtended which inherits from DebtorClient and second one is DebtOrder which contains DebtorOrderClient
switch (ActionType) { case "OrderDesigner": case "OrderPreview": try { var arrayDebtOrder = Array.CreateInstance(typeof(DebtorOrderClient), 1); arrayDebtOrder.SetValue(selectedItem, 0); if (ActionType == "OrderPreview") { string repParams = "Report=DebtOrderSampleRep;reportType=PackNote"; object[] src = new object[2] { arrayDebtOrder, repParams }; AddDockItem(TabControls.ReportsPreviewPage, src, "custom rep preview"); } else if (ActionType == "OrderDesigner") globalEvents.NotifyOpenExternalReport(typeof(DebtorOrderClient), arrayDebtOrder, "debtOrder"); } catch (Exception ex) { MessageBox.Show(string.Format("{0}n{1}", ex.Message, ex.StackTrace)); } break; case "xDesigner": case "xPreview": try { var DebtOrd = new CustomPageSample.DebtOrder(selectedItem); var debtOrdCollection = Array.CreateInstance(typeof(CustomPageSample.DebtOrder), 1); debtOrdCollection.SetValue(DebtOrd, 0); if (ActionType == "xPreview") { string repParams = "Report=customDebtOrderSampleRep;reportType=OrderConfirmation"; object[] src = new object[2] { debtOrdCollection, repParams }; AddDockItem(TabControls.ReportsPreviewPage, src, "custom rep preview"); } else if (ActionType == "xDesigner") globalEvents.NotifyOpenExternalReport(typeof(CustomPageSample.DebtOrder), debtOrdCollection, "debtOrder"); } catch(Exception ex) { MessageBox.Show(string.Format("{0}n{1}", ex.Message, ex.StackTrace)); } break; }
switch (ActionType) { case "Designer": case "Preview": try { var debtEx = new CustomPageSample.DebtorExtended(); StreamingManager.Copy(selectedItem, debtEx); var arrayDebt = Array.CreateInstance(typeof(CustomPageSample.DebtorExtended), 1); arrayDebt.SetValue(debtEx, 0); if (ActionType == "Preview") { string repParams = "Report=customDebtSampleRep;reportType=Statement"; object[] src = new object[2] { arrayDebt, repParams }; AddDockItem(TabControls.ReportsPreviewPage, src, "custom rep preview"); } else if(ActionType== "Designer") globalEvents.NotifyOpenExternalReport(typeof(CustomPageSample.DebtorExtended), arrayDebt, "DebtExtended"); } catch(Exception ex) { MessageBox.Show(string.Format("{0}n{1}",ex.Message,ex.StackTrace)); } break; }
-