Concatenated SQL fields in selector and/or custom PXDimension - acumatica

We have a set of BLC/DAC for a customization that has multiple tables with the given relationship
Table1 - T1ID (int-autoincrement), T1CD (char-substitute key)
Table2 - T2ID (int-autoincrement), T2CD (char-subsitute key), T1ID (reference to T1ID)
where the records in Table2 are unique for each given T1ID selected.
The initial design specification was for the users to select first the Table1 value, then the Table2 value (UsrTable1Value, UsrTable2Value respectively) in the data entry screens.
The users have recently asked if it's possible to combine these into one field simular to a Dimension selector so that there is one field resulting in "Table1-Table2" stored as T2ID.
My first thought was to simply create a subclassed dac with a concatenated property for T1CD-T2CD and base the substitute key off that however performance is a problem when that is done (1.6 million records). The delay is in the framwork side as it appears it processes the entire recordset when generating the concatenated substitute key.
Based on that I thought perhaps instead to simply generate a PXDimension configuration for this however I can't find any reference to make Dimension 2 rely on the value of Dimension 1.
I know i could always create a view that does this but i'd prefer to keep it within the framework if possible.
That basically brings me to two questions
1) Outside of a view, is there way to concatenate fields in the BQL so the lifting is done on the SQL and not with a calculated property?
2) Does anyone have or know of a sample of custom Dimensions where the values in level 2 depend on the value in level 1?
Any suggestions would be appreciated.

Out of the box, dimension selectors are designed to work only with Segmented Keys and won't be able to handle values from multiple tables. In theory, it can be possible to populate segment popup from different tables within a custom DimentionSelectorAttribute. However, this will additionally require to store each T1ID/T2ID pair in a separate table with some other column declared as a key (same concept used in the Sub table to store sub accounts: SubID is a key and SubCD stores values composed from multiple segments).
My personal opinion, the effort is just not worth it. Going one step further, I would check with the customer on how they expect navigation buttons (first, prev, next, last) to work with their segmented input control? If following standard Acumatica UI design with separate input created for every key field, no additional effort is needed to properly handle both data entry and navigation.

Related

Transistioning from Excel to Access - challenges in assigning/determining a Primary Key

I am currently working on attempting to transition a large database of testing records from Excel to Access to allow for better relational analysis between different groups; however, with how our team completes tests the same tests are repeated on a cycle making it difficult to capture a unique ID -
I have considered assigning one for each test but then realized the ID would still repeat when the test is ran again. I have considered using the timeframe of the review but that would also be repeated unless I build a separate table for each individual test. I have considered using the issue number that would be assigned to items requiring action, but this would not apply to all rows therefore access would not allow it.
Within our current database we capture test name, type, timeframe reviewed, start and end dates, result types, descriptions and root cause, and issue identifiers if remediation is required.
Does anyone have any suggestions on how I might transition this data into Access without losing the Primary Key feature on certain tables?
I would suggest creating a master table to identify your 'test types' (the things that can be run multiple times). You populate this table with the unique entries in the test name column in your Excel data. This column in your Excel data then becomes a 'foreign key' pointing to your master 'test types' table.
Ideally I would recommend using an autonumber as the primary key in the master table and then replacing the test name column in your Excel data with the numeric values generated when you populate the 'test types' table.
You would then import your Excel data into a table that is recording 'Test Run Instances'. Again I would set an autonumber field as the primary key on this table. Other columns in your Excel data that contain repeating data would make candidates for other 'master' tables (e.g. you talk about 'result types' - is there a set list of these that could be moved out to a master table?).

Docusign: Create template to display dynamic list of text

I'm looking for a way to build a table in a docusign template where the rows could be bound dynamically using the input data. For example, in the sample below the "Selected Options" is the table and the rows are dynamic user inputs :
**Selected Options**
2 bedroom
lake facing
non-smoking
Thanks
DocuSign does not support generic "tables" in the documents, so if you want to use a table it will have to be created at the document layer then uploaded into DocuSign.
One possible option is to create a the layout for a table in your document and leave spaces where the data will eventually go, then read or otherwise designate those locations on the document where the fields are, then finally you can place DocuSign tabs at those locations and that would in turn populate your table.
As Ergin says, DocuSign doesn't support dynamic creation of tables in a Document, such that the length (size) of the table will automatically vary according to how much data (i.e., how many rows) are specified. Your Create Envelope request specifies a (static) document, and you use DocuSign tabs to overlay data on top of that static document in specific locations.
That said, few options you might consider:
Create the table in your (static) document to contain the maximum number of columns/rows that it could ever possibly contain. Then, place tabs in every cell -- but in the Create Envelope request, only populate the tabs that correspond to the data the user provides. The down side of this approach would be that you could end up with a table that has several blank/empty rows, if the user doesn't specify much data.
OR
A more complex approach would be not define the Document in the Template itself, but rather, have the Create Envelope API request dynamically specify the Document, based on how much data the user provides. For example, if the table could contain between 1-3 rows, you could create 3 static documents -- the first with a one-row table, the second with a 2-row table, and the third with a 3-row table. Then, include logic in your code to determine how much data the user provides (1 row, 2 rows, or 3 rows), and specify the appropriate Document in the Create Envelope request. (Hint: you'd need to use 'Composite Templates' structure in the API request to accomplish this -- there's lots of info about that here on StackOverflow.) Biggest upside of this approach would be that the table in the document would always be the right size to exactly accommodate the user-provided data -- but obviously this approach could be challenging to implement and maintain if your document contains multiple tables and/or a large number of max potential rows in each table.
OR
Finally, in the same spirit as option #2 above -- if there's just a small number of variations of table size (for example: the table will always contain 1, 2, or 3 rows), you could simply create 3 Templates via the DocuSign web UI -- the first Template containing a Document with a one-row table, the second Template containing a Document with a 2-row table, and the third Template containing a Document with a 3-row table. Then, include logic in your code to dynamically choose the right template to use in the Create Envelope request, based upon how much data the user provides (1 row, 2 rows, or 3 rows).

How to create a view using a count of certain field

I am trying to create a categorized view of all Notes documents that have a field with exact same value, i.e. there is a field for Contractor Name and I want to create a view that lists each Contractor and the documents that relevant to each. How do I do this? I have tried view formulas like the following but no success as yet
SELECT #IsAvailable(Contractorid) & #Count(Contractorid) > 1
SELECT #Count(#IsAvailable(Contractorid)) >1
Nsf databases are no relational databases. The count of different documents with a unique value in a specific field cannot be used to build a view selection formula.
You could write an agent, that runs through all documents and counts them and puts all with count > 1 in a folder, but this is quite a lot of LotusScript code and needs some advanced knowledge.
The other possibilit would be to categorize the view by ContractorId and add one column before that categorized column: simply use 1 as column formula and select "display totals" in the column properties as well as "hide details".
Then at least you have the information, how much documents are in each category, but unfortunately you cannot filter by it and you cannot sort by this column.
A third possibility would be to use an xpage interface, but that is even more work to do and a completely different story developmentwise.
This is similar to view to identify duplicates. My approach is to use folder.
Make a new folder with design of your view. Instead of (not working) selection formula use short LS code as an action, or QueryOpen event (make sure only one user runs the script).
The code should cooperate with another (hidden) view sorted by Contractorid. Make a ViewNavigator for that view and traverse through it with simple logic - if previous entry has the same Contractorid as the current one, put both documents into folder**. That way you will get list of all documents with duplicate Contractorid. Make sure to wipe all the current content from the folder at the start.
** This can be optimized further by slightly more complicated algorithm to handle first duplicate diferently - for more than two duplicates this algorithm makes extra calls of PutInFolder method.

Add a field to the merge function view

How do I add fields to the view when merging records?
All fields on the last used form are used for merge function, you don't have to do anything specifically other than making sure they are on the form.
The fields are always filtered and only shown if one or other of the merged records contains a value - this avoids wasting time and screen real estate asking users to select between two blanks, so they more easily see the fields that are different. Bit fields (two options) are included since they always have a value of 0 or 1.
See this page for some practical tips as well:
http://blogs.msdn.com/b/emeadcrmsupport/archive/2013/12/18/dynamics-crm-2011-merging-records-issue-with-multiple-forms.aspx

Portal displaying data from two tables

I have two tables which both include a date field. Currently I have two portals, one for each table (occurrence).
Is it was possible to display the results of both of these in one portal, and sort by the date?
Technically a portal can only display records from one table. If you need to join two tables then you have to do this manually or change the design and use one table instead of two (since you want them in the same portal, then the tables are similar to some degree; maybe this similarity can go into its own table).
Sometimes developers use the so-called virtual table technique: they create a table with, say, a field with the record number and a bunch of calculated fields that pick their values from elsewhere, for example, from prefilled global variables. They create a portal to this table, set up the relationship to display the required number of records, and write the code to fill these variables. This way they can show data that isn't stored in any table, combine tables, etc. But it's an arcane technique, I would recommend it only as the last resort.

Resources