I have a PowerApp I have been working on that presents some data from an excel table in a Gallery,
I have added to this gallery a tickbox as shown below.
AppExample
The purpose of the app is that multiple users can access the app, tick multiple boxes, and then click save.
Obviously with multiple people picking multiple options there will be overlaps between them, these need to be recorded.
I have created a list in sharepoint "AcademicChoices" and given it the extra column of "Volunteer"
ListExample
How I imagine this will work is that when the user has ticked some boxes and click "Save" it will send the "Project Title" to the "Title" column, and the username of the person logged into the app to the "Volunteer" column for each of their ticked items.
Here is a crude example of how it would work assuming that the user of the powerapps username was "stan"
ChoicesMockup ListMockup
From my research so far I can see that it can be achieved with Patch or SubmitForm but I have not had any luck with either of these.
Thanks.
Editing this to add the code I have
So I have the following
If(
Checkbox1.Value=true,
Patch(
'AcademicChoices',
Defaults('AcademicChoices'),
{
Title: ThisItem.student,
Volunteer: User().FullName
}
)
)
This works, however it does not record the value of the field project, "Title: ThisItem.student, " I tried changing the string to
If(
Checkbox1.Value=true,
Patch(
'AcademicChoices',
Defaults('AcademicChoices'),
{
Student: ThisItem.student,
Title: ThisItem.project,
Volunteer: User().FullName
}
),
Checkbox1.Value=false,
Remove(
'AcademicChoices',
Defaults('AcademicChoices'),
{
Student: ThisItem.student,
Title: ThisItem.project,
Volunteer: User().FullName
}
)
)
This works to a degree, but as soon as I add the Checkbox1.Value=false, section and untick the boxes it will not actually remove the data from the list
I think you should try and add your values to a collection first then probably have a button to then patch it to the data source when you are done, rather than communicating with the data source directly which is why the data is been removed from the list when you uncheck it
Related
I want to display some read only URL in STRAPI collection page.
let's say I am at
/admin/plugins/content-manager/collectionType/application::my-public-form.my-public-form/1
now I have one field that need to display URL like this
https://myurl/1
is there is any way to get current url i.e. /admin/plugins/content-manager/collectionType/application::my-public-form.my-public-form/1
and in field I display https://myurl/1
This is going to be a lengthy answer, but let me try to simplify as much as possible.
Explanation:
To achieve this you need to simply create a field in the collection type and mark it as non-editable in the admin interface. This will make it a read-only property. Next, we need to override the afterFindOne from the lifecycle hooks of the model so that when it fetches the entry from the db, we can pre-populate the url for that particular entry, so that it's displayed in the read-only field in the UI.
Implementation:
Let's assume we are creating a collection-type called Student, which some basic field like first_name, last_name, dob and student_url. We are going to make the student_url field read-only in the following way:
Create the collection type Student as show in the screenshot.
Visit the newly created collection-type in the content-manager, click on Create new entry button, and then click on Configure view in the right hand panel.
Click on the small pencil icon which is besides the student_url field to open a popup, and then set the Editable property to False and click Finish.
At this point you're almost done, the only thing left to do is set the lifecycle hook to populate the student_url field when it's fetched from the database so that it's displayed correctly in our UI.
Create a lifecycles.js file in your model folder.
// src/api/student/content-types/student/lifecycles.js
module.exports = {
afterFindOne(event) {
const { result } = event;
// You can easily change this line to `/admin/plugins/content-manager/collectionType/application::my-public-form.my-public-form/${result.id}` in your project.
if (result) result.student_url = `https://example.com/${result.id}`;
},
};
And that's it. Now create an entry in the admin UI with the rest of editable fields and see entry being populated automatically with the student_url. Cheers!
I didn't find any documentation on advanced customization.
I need to customize Sales Order in a more advanced way than basic customization offered in UI Customization Menu.
For example, add some sublists under Item section with a relation one to many between Item and Messages (1), or add a new button to display a new page to create a messages record page linked with the selected item (2).
Thank you!
Explicative Screenshot
NetSuite's current API does not accommodate the use of custom buttons inside sublists (unless you are using the native REFRESH or MARKALL button within a custom Suitelet).
An alternative solution to bridge the gap between the item record and the message record you want to create, why not do the following:
First, create a SUITELET which opens as a CHILD window of the current window on FIELDCHANGE of the item.
Second, add a basic TEXTAREA field and include the SUBMIT button to the suitelet.
On SUBMIT of the Suitelet, ccreate a new message record, attaching it to the current sales order.
Lastly - ensure the Suitelet closes itself.
Note: This solution will only work on EDIT of a sales order. It will not work on CREATE because no order ID would exist at the time you submit a message. (You need the order ID to attach the message to).
I hope this suggestion is clear.
You can do your customization on BeforeLoad in a UserEvent script : you can access the current form from the context and do somethings like adding buttons, sublists, hiding fields...
You can not add a button, but you can add a link pointing to a Suitelet where you can execute your actions. As an example, I created a sublist with a View link that points out to the line's custom record:
To define the field:
var idField = appStepsSublist.addField({
id: 'id',
type: serverWidget.FieldType.URL,
label: 'View'
});
idField.linkText = 'View';
To set Value :
var viewUrl = url.resolveRecord({
recordType: 'customrecord_nab_approval_step',
recordId: appStep.id,
isEditMode: false
});
usedSublist.setSublistValue({
id: 'id',
line: index,
value: viewUrl
});
In your case, you can use the URL module to get a Suitelet link and append to it the needed data from your current line.
I know this is a common problem, and I tried a few solutions already, but the problem I have right now with my current code is that even though the attachments show in the computed for display field, I get the error "Note Item not Found" when I try to open them.
The form is built with two fields, in a programmable table that displays the editable one or the computed for display one.
The trick I found with Google's help was to delete the computed for display item in the queryopen event, so Notes regenerates the cfd item when opening the document. Visually, this works, as I see the text and attachments, but the attachments can't be opened.
Here is the code that removes the item in the QueryOpen of the form:
...
Set item = doc.GetFirstItem("dspDescription")
If Not item Is Nothing Then Call item.Remove()
...
Has anyone successfully achieved that functionality? Is there another way of doing this? I already tried with subforms, and because of the way the application is built, I need to be able to switch from editable to read only on the flick of a radio button, so subforms are out of the question as they can't be displayed dynamically.
Why don't you simple put the richtext item in a controlled access section and make that section editable / not editable with a computed for display formula. Select "always expand" and hide the section title, so that nobody can collapse it, et voila.
Regarding your comment: With this properties:
for this section in designer:
You get this result:
You see: No twisty, no "visible" section
I have a search screen which shows results from a 'projects' entity. One of the fields is a link to a 'Clients' entity, which has a client name.
I can use the search box above the data to search by project name, date, etc but I cannot search by client name. i guess because it is actually a reference to a seperate entity.
How can i make it so that I can search for projects, using the search box, by client name?
To try to explain clearer here is the database layout.
Project
------
ProjName
ProjType
ProjComment
Client --------------- Client
-----
Name
Address
I can search by the project fields, but not the client name.
Create a custom query for Project entity and add optional parameters for all the Project and Client properties that you wish to search for. Wire up the custom query filter.
For full control do not wire up the custom query filter, instead filter in code behind, the PreProcess event.
if your using the HTML Client it can be done as follows on a browse screen associated with in your case the Project Table. if you look at the left navigation bar, click on edit query and within here, you can see 3 options, Filter, Sort and Parameters.
Filter should say Client.Name based on your table structure, the second should be changed to "contains", the 3rd should be set as parameter and finally the 4th box is where you create the new parameter you are going to use as a search box...
you can rename the Parameter at the bottom and I always find its best when on this, to set it as optional in the bottom right property box. (This means all the data will be displayed rather than nothing until searched)
Now if you were to go back to your main screen page, drag this parameter from the left onto the main screen page and set it as a text box. Using this and pressing enter after you have typed something will display the results that match what you have typed so far.
a little more to the above, if you were to click "Edit PostRender Code" and add the below then after 3 characters are entered, the table list your searching through will be updated automatically after each finger stroke...
$searchBox = $("input", $(element));
setTimeout(function () {
$searchBox.focus();
}, 1);
onInputAsYouType(element, 1, function (text) {
contentItem.screen.[CREATED PARAM NAME] = text; //SearchText here is the data item in the screen designer linked to the query parameter
});
function onInputAsYouType(element, numberOfRequiredChars, done) {
var inputbox = $("input", $(element));
inputbox.on("input", function (e) {
var text = $(this).val();
if (text.length >= numberOfRequiredChars)
done(text);
});
};
};
I have my account entity linked to a custom entity called inspections, I only want these inspections to be created for accounts of a certain type. So when it isn't that type I want the left hand navigation to this entity to be hidden away. I've seen some code that says will hide it away, as long as you have the navID of the item.
I've had a crack at hiding it using what i thought could be the ID but it hasn't worked, so I'm wondering if anyone knows how to get this ID, or if there is another way to do this?
The code I'm using to hide the navigation is below:
var navitem = Xrm.Page.ui.navigation.items.get("nav_ts_inspection");
if (navitem != null)
{
navitem.setVisible(false);
}
Load the form
Press F12 to show IE Developer's Toolbar
From here you can use CTRL+F to search for the display name of the item you'd like to hide. This will give you a link that is generated. The Id of this element is what you need to use to show/hide the link.
As an example, you can see results of searching for 'Sub Accounts' on the Account screen for an installation I am working on at the moment. The Id can be seen and is 'navSubAct'
Changes by traversing DOM and manually hide an area is not officially supported.
Luckily if you are on CRM 2011, you can go to
Settings > Customization Or open the solution.
Select the entity > Forms. Inside the Form editor window, open the Form Properties of the entity.
Go to Display Tab and untick "Show navigation items" checkbox.
Finally do not forget to Publish your changes.
Use the relationshipname to hide folder in navigation like this:
If you have folder with the relationship name: ts_inspection
Use this for ID: navts_inspection
So otherwise the same as above, but lose the extra underscore (_) between nav and ts.
var navitem = Xrm.Page.ui.navigation.items.get("navts_inspection");
If you want to hide particular navigation section from the FORM then remove all the links from that section and publish it. That section will not be visible anymore.
If you want to just remove Navigation Pane from FORM, then go to 'Display' tab of form and mark as 'Do Not Show' and then publish it.