I do not know way which I can fill my form automatically. I mean that I made easy database which has just table. I made form too. User can write some information about herself/himself, for example name. If he/she end filling places to fill he/she should click send button and all information (expect ID - it gives admin) are on database. User can edit his/her information by clicking button - when he/she click it, it is possibility to write ID - when ID is ready, user can click button load data which fill all places by information connected with this ID.
I tried make some SQL query but it does not work. I past part of my code in window below, but I tried many combination of vba and sql - it always look very easy.
Private Sub button_wczytaj_Click()
OK_imie_wpr.Text = Select OK_imie from Karta_projektu where
Numer_projekt_wpr = Numer_projekt
Form.Refresh
End Sub
button_wczytaj - button which load my data.
OK_imie_wpr - it is place where user can write his name - for example: Tom
OK_imie - it is place where i hold name on my table.
Numer_projekt_wpr - it is blocked place, user get his/her project ID from admin.
Numer_projekt - it is place where I hold ID on my table.
Karta_projektu - it is name of table.
I expect that when I fill place for ID and click load button I get all data connected with my ID. Something like:
SELECT OK_imie from Karta_projektu where ID = [And here i need id which user just write].
select load Button Goto- Property- goto Event Propert- onlick Event-
'Assume your Textbox where you write your ID is Name as 'TxtID'
Dim Query1 as string
Query1 = "SELECT OK_imie from Karta_projektu where ID = " & Me.TxtID & " "
Me.Form.Recordsource = Query1
Me.Form.Requery
I hope you have created a Bound Form.
Related
I need to make the function of inserting data into several tables at once in the ORACLE APEX App Builder. Interactive report displays information from the View collected from the tables "Book", "Autors_list", "Autor", where "Autors_list" is needed to reveal the many-to-many relationship between the author and the book.
So, on an automatically created form, when I click on the CREATE button, using a dynamic event, I try to add data to the "Book" and "Autors_list" tables.
The data I'm trying to add:
P15_ID_BOOK - book id - add to "Book" and to "Autors_list"
P15_BOOK_NAME - book name - add to "Book"
P15_AUTORS - authors - are represented using the Checkbox Group - I need to go through each of its elements and for each element add an entry to the "Autors_list" in the form (P15_BOOK_NAME, author id from P15_AUTORS)
P15_PUBLICATION_DATE - publication date - add to "Book"
P15_PRICE - book's price - add to "Book"
The CheckBox Group is set using the following List of Values
`
select "id_autor", (CONCAT(CONCAT(autor."Name", ' '),autor."Surname")) as "Autors" from "Autor" autor;
`
I wrote the following PL/SQL code to add the above values to the tables:
begin
insert into "Book"
("Name", "Publication_date", "Price")
values
(:P15_BOOK_NAME, :P15_PUBLICATION_DATE, :P15_PRICE);
FOR i IN (select * from table(apex_string.split(:P15_AUTORS, ',')))
LOOP
insert into "Autors_list"
values (:P15_ID_BOOK, i);
END LOOP;
end ;
However, it gives me an error
ORA-01008: not all variables bound
Please tell me how to cycle through the elements of the Checkbox Group correctly and get the values from there
Typically this is not how you would do this in apex. You say So, on an automatically created form, when I click on the CREATE button, using a dynamic event, I try to add data to the "Book" and "Autors_list" tables.
If the form is automatically created, then a page process will be created to handle the insert into "book" for you. There is no need to create a dynamic action (not "dynamic event") to do this. Everything will be done when the page is submitted. That is the "normal" flow in apex: a page is rendered, the user enters data, and then the page is submitted (and all processing is done). Dynamic actions are used to manupilate the dom, perform ajax callbacks, etc - all the things that do not require a page submit.
The only think that is left to be done is to create an additional page process to insert the child records in the "Authors_list" table. That page process needs to happen after the form process since the value for :P15_ID_BOOK will be generated on insert of the record in to books.
The code of your page process will be something like what you already have
FOR i IN (select * from table(apex_string.split(:P15_AUTORS, ',')))
LOOP
insert into "Autors_list"
values (:P15_ID_BOOK, i);
END LOOP;
I've had a couple of attempts at this, but can only get one record to update. Hopefully someone can shed some light on what's I'm doing wrong, assuming this is possible.
I have a list of Employees (List A), within that list I have a field to flag when they leave.
The second list (List B) is a list of activities. I need to be able to filter this list to exclude everyone who's left, or no longer active. I've added an equivalent Yes/No field to this list.
What I'm trying to do is update the Inactive field in List B for in every record for the employee in List A that the field has changed in.
My Lists before and after look like this
My Basic Workflow Loop looks like this
List A = Current List
List B = Leave Requests
I can break down all of the selections above if that would help someone to help me on this.
Thanks
This can be done with a combination of the REST API and a workflow. Being a complete noobie to Sharepoint, this took me a while to figure out, but hopefully this step by step workflow example will help someone else out there.
Firstly, I primarily used these two blogs to come up with my solution:
Wonder Laura - Loop through multiple Sharepoint items
Kemanth Kumar - Loop Through SharePoint Custom List Items
Final Workflow
Step 1: Create your two lists in Sharepoint. In my case, List A is call StaffList which is a list of all staff members and List B is called LeaveRequests.
Viewing the logs:
You will notice that I have written to the log history throughout the script. To see these logs go to the List A page, click on the staff member you will be changing and the workflow icon lights up in the ribbon at the top. Click on it and all your workflows that have run or are running for that particular staff member will be listed.
API Results
We will be putting a call through to the API and can be annoying at times not seeing what the API returns. See the end of this post to see how to view the API results easily view email.
Step 2: Open Sharepoint designer, click on "Workflows" in the left panel and "List Workflow" should popup in the top ribbon. Click on "List Workflow" and select List A (StaffList) which you created. This will be the list that will be manually updated by a user and will run the workflow. Type a name and description in the box that pops up and Platform type needs to be Sharepoint 2013 Workflow.
You will need to make this workflow run automatically, so save the Workflow then click on Workflow settings in the top ribbon and under Start Options, select the workflow to start Automatically when an item is changed.
Step 3: Showing Start Time using webserver time.
Create a Stage from the ribbon and name it Start Time.
From the Action ribbon click Set a Workflow Variable. Click on workflow variable and create a new string variable called StartUrl. Set the value to your Sharepoint or website address in the string builder.
Select Build Dictionary from the action ribbon. Click on “this” and a box will popup. Create two items in there, one named “Accept” and the other “Content-Type” and both type String an Value will be application/json;odata=verbose. Then output to a new dictionary variable called requestHeaders.
Now you will call a HTTP web service from the actions ribbon. Click on “this” and Enter the first Variable in the URL box. DON’T type in the variable as it won’t work do a Lookup by clicking Add or Change Lookup. A box will pop up, select Workflow Variables and Parameters from the Date source and variable StartUrl from Field from Source. Use method GET click Ok. Set the response content to a dictionary variable called responseContent, response headers to dictionary variable called responseHeaders and response status code to string variable responseCode. Then edit the call properties by click on the right dropdown arrow and click properties. A box will pop up, set request headers to variable requestHeaders.
Now you will need to get the response from the call by using Get Item from Dictionary from actions ribbon. The item path should be set to Date/(0) and dictionary should be responseHeaders (usually this would be responseContent, but the Date of the server sits in the Headers). Output to String variable called StartDate. For more detail on this, go tothis helpful link. Please note this comes through in GMT time. If anyone has ideas on converting to this to a more readable date format, let me know.
Now you can Log the Start Date. Select log to history from the action ribbon and click on message and type Started: and now you will have to put in the variable. DON’T type in the variable as it won’t work do a Lookup by clicking Add or Change Lookup. A box will pop up, select Workflow Variables and Parameters from the Date source and variable StartDate from Field from Source.
Step 4: Create a stage that will get a list of records that need to be updated from the LeaveRequests list (List B). Point the Start Time stage to this new stage by inserting a “go to stage” action in the Transition to stage area in the Start Time Stage.
I have used the user as a common field between both lists. The aim is update a column called StaffListInactive with either yes or no. These values are actually taken from a field in List A.
Lets start off with getting the ID of the staff member in List A that is being changed. Set a workflow variable of type Integer called StaffListID. Do a lookup for the value with data source of current list, field from source in my case will be the employee name and return field as User Id (as Integer). Field will be Employee Name, value will be a lookup of current item, Employee Name and returned as User Id Number.
Now set another workflow variable type string which will be a REST API called RestUrl. A lot of magic happens in this url including getting the list GUID, selecting the fields from the list you want to return, filtering only results we need and increasing the number of results that are returned. Sharepoint’s default is 100 records.
The format of this url for getting items from a list is as follows for your BASE sharepoint site:
http://yoursharepointid.sharepoint.com/_api/web/lists/getbyid(guid‘yourlistguid’)/Items
For a link with additional queries/filters:
http://yoursharepointid.sharepoint.com/_api/web/lists/getbyid(guid’yourlistguid’)/Items?$select=ColumnName,Column2Name&$filter=ColumnName eq ‘content’&$top=9999
To get the GUID, in Sharepoint designer 2013, click “Lists and Libraries” in the left panel, select List B (LeaveRequests). You will then see the List ID. Insert this into the GUID area in between the ‘ and ’.
If your column name has a space, you will need to insert x0020 in place of the space. So mine looks like this Employee_x0020_Name. Also another point to note is in order to get the Employee ID, you will need to include the Id at the end of the Column Name: Employee_x0020_NameId. For filtering this column needs to be Employee_x0020_Name/Id.
So Finally my url looks like this:
http://****.sharepoint.com/_api/web/lists/getbyid(guid’***********************’)/Items?$select=ID,StaffListInactive, Employee_x0020_NameId &$filter= Employee_x0020_Name/Id eq ‘[%Variable: StaffListID%]’&$top=9999
Remember to do a lookup when inserting the variable.
Now you will need to build a dictionary the same as you did in Step 3 above. You could copy the actions and then reassign new variables (although not essential from this workflow). The only variable you will need to change is the URL variable in the Web service call to RestUrl which was created above. If you copy across the build dictionary action, you will need to add the Accept and Content-Type items to it again.
For the get Item from Dictionary action, your path for this will be d/results and your dictionary will now be responseContent and output this to dictionary variable called List.
Step 5: Now we count the number of results pulled from the API and run them through a loop which will update each record.
Create another Stage Cclled Update Inactive Status.
Add “Count Items from Dictionary” action and set dictionary to List Variable and output a new integer variable called ItemCount.
Set an integer variable called index with value 0.
From the loop ribbon insert a loop with a condition. Update the values so that they read variable index is less than variable ItemCount.
In the loop you can Log which loop is running by adding a Log action and calling it Loop Number: Variable Index.
Now this next part is not necessary to include but I feel it’s good to have this check to see that the user being updated is actually the user that you want to be updated. IE, we compare the ID’s of the users in both lists.
Add a Get Item from Dictionary action with the path being d/results([%Variable:index%])/Employee_x0020_NameId. Remember to do a lookup on the variable. The dictionary will be responseContent and the output variable we will call EmployeeID type integer.
Now we add an “If any value equals value” from the Condition ribbon and set the first value to the following: Data Source is Current list, field from source is Employee Name, Field is employee name and value is a lookup of Data source is Current Item, Field from source is Employee Name and return User Id Number.
For the second value in the If statement select Workflow Lookup for User from the list, then click Add and when the box pops up data source will be Workflow Variables and Parameters and field from source will be Variable EmployeeID.
Now we need to update the record by getting the value from List A (StaffList) and setting it in List B (LeaveRequests).
Add “Update List Item” from the actions ribbon and click on this list and choose List B (LeaveRequests) from the List dropdown. Click the add button and “Set this field” to the column you want to change (mine is StaffListInactive) and click on the lookup for “To this value”. When the box pops up date source is current list, field from source is Inactive (this is the field you are updating from is List A), Field is Inactive and value is a lookup of current item and inactive.
Once that is done you will need to update the field and values on the “Update List Item” window. Set the Field to ID and the value is a lookup of workflow variable and EmployeeID.
Log that the record has been update.
Now we need to add 1 to the index variable and set it. This sits outside of the if statement but still within the loop.
Add a “Do Calculation” action and set this to Variable Index plus 1. Output this to number variable IndexPlusOne.
Now set Variable index to variable IndexPlusOne.
Step 6: Log the finished time.
This is identical to the Start Time Stage. So copy the start time stage and paste it at the bottom of your work flow and remember to make sure all your stages are linked. Update the details as you see fit.
In conclusion when you update details on List A, List B will now update the selected field to match the selected field in List A based on the staff member that has been changed.
API Results Cont…
This might be old hat to a lot of people but came in very useful for error testing.
After any of your web service calls add a Send to Email Action. Select your email in the to field and give it a subject. In the body of the email add in the responseHeaders and responseContent variables. Each time your workflow runs, you will be emailed. The email comes through faster than what the records update in the workflow log, so was quicker for me to troubleshoot.
I feel like I am missing a fundamentally easy process in Access right now.
I have 2 tables with different information on them. Table1 is client info Table2 is client orders. The primary key linking these two tables is the client_id. I made a form to input data into Form2. The form works and I can easily submit data to Form2 but I would like to add a read-only text box beside the client_id field that will display the customers first and last name (stored on Table1) to show the user that the client_id was typed in correctly. Am I going about this the wrong way or am I just missing something? Thanks for any guidance.
In the AfterUpdate event of the client_id field, use DLookup to lookup the client name, and set the value of an unbound, locked textbox to the name.
You can also fetch two fields into one expression:
Me.txtClientName = DLookup("[FirstName] & ' ' & [LastName]", _
"Clients", "client_id = " & Me.client_id)
I am currently attempting to design a database that requires a number of users inputting data via forms.
one of these tables is a 'user' table. Amongst the information in the table is
userid (int),
username (text),
first name (text),
last name (text)
In the even that I'm filling out a form and supply the the username in the username field is it possible if the username already exists to pull the first name and last name from the user table and auto-populate those form fields? If so can you point me in the right direction please?
Directly via access functionality or via vba? If not possible in 2003 is this possible in 2007?
Ok now for the auto fill (yes i did find one example), This will fill the username after you filled the userid (Both should be comboboxes in this case called Usernamecombo and useridcombo)
First make the query with a SQL similar to this:
SELECT [User].username FROM User WHERE ((([User].userid) Like '*' & [Forms]![Yourform]![useridcombo] & '*'));
Lets call this query "qry_username".
Then go to designview of the form and to the properties of the useridcombo, in the event/afterupdate property you make a event procedure (VBA) :
Private Sub useridcombo_AfterUpdate()
[Forms]![yourform]![Usernamecombo].Value = DFirst("username", "qry_username")
Forms("yourform").[Usernamecombo].Requery 'this last line is optional
End sub
Other fields can be added to the VBA pretty simply(dont forget the query)
Private Sub useridcombo_AfterUpdate()
[Forms]![yourform]![Usernamecombo].Value = DFirst("username", "qry_username")
[Forms]![yourform]![Firstnamecombo].Value = DFirst("Firstname", "qry_username")
[Forms]![yourform]![Lastnamecombo].Value = DFirst("Lastname", "qry_username")
Forms("yourform").[Usernamecombo].Requery 'this last line is optional
End sub
I have a similar form and i use to make these field as Comboboxes.
Then set the property row source as a query.
Set the criteria Where like this
WHERE ((([Users].Username) Like '*' & [Forms]![YourForm]![Username] & '*'));
This will allow the user to choose the name as fast as possible
But it will not fill it automatically because my users can have the same username as others.
I have been asked to look into FileMaker for creating a pretty simple database app. The application will handle contact information, some information about events hosted by the organization and - and this is where I'm currently struggling - RSVP information that link the contacts and events, as well as stores some data about payment.
What I would like to use is some kind of form where the user gets to search for a contact (any combo of first/last name) and an event (any combo of name/date), select each from two respective lists (where all other information is displayed as well, to distinguish the results), add some extra information and hit submit.
The closest I've gotten so far is a form where the user can enter a ContactId and EventId manually, which means that he/she first has to go to another view, search for the records, and copy/paste the id numbers.
Is there really no way to get closer to my vision using FileMaker?
Would a better option be to build a new, custom app using for example C# and MsSQL?
If so, how do I sell this to my contractor? As this would in that case be my first commercial application, there is obviously a "safety factor" that speaks in favor of an established product. And then we haven't even mentioned that the cost would probably increase, as developing a new app from scratch would take much longer time.
Note: I have no previous experience with FileMaker. I've tried to read the documentation, but I haven't been able to find any tutorials that take me closer to my specific needs. I'm fairly experienced in MsSQL, so I do know this and that about database management in general - just not in FileMaker.
There are loads of ways to do it. This is a quick way to get it to work.
Let's say you have two tables like this:
Contacts Events
-------- --------
ContactID EventID
FirstName EventDate
LastName EventDetails
Create a new link table between them that also stores the extra RSVP information you want.
RSVP
--------
fk_ContactID
fk_EventID
PaymentInfo
Create a FORM table
FORM
--------
ContactSearch
cContactMatch = Calculation, If(isEmpty(ContactSearch) ; "ALL" ; ContactSearch)
EventSearch
cEventMatch = Calculation, If(isEmpty(EventSearch) ; "ALL" ; EventSearch)
Add the following fields to the Contacts and Events tables:
Contacts
--------
cMatchField = Calculation, Stored, (FirstName + NEWLINE + LastName + NEWLINE + ALL + NEWLINE + Firstname LastName)
Events
--------
cMatchField = Calculation, Stored, (EventDate + NEWLINE + EventDetails + NEWLINE + ALL)
This means that the cMatchField for Contacts will look something like this:
John
Smith
John Smith
ALL
In the relationship diagram, connect the tables like this:
FORM
--------
cContactMatch = CONTACTS/cMatchText
cEventMatch = EVENTS/cMatchText
Create a layout called FORM based on the FORM table.
Add the fields ContactSearch and EventSearch to the layout. Add the PaymentInfo field.
Add two PORTALS to the layout, one for the Contacts table, one for the Events.
By default you should see all the records in each of these portals.
Write a script, or use a script trigger, that refreshes the layout whenever one of those search fields is Exited/Modified. This should refresh the portals and show you the related records you're interested in.
Add a button to each row in the portals and call a script that sets a global variable to that portal rows ID.
For example:
Script: Set Selected Contact ID
Set Variable ($$ContactID ; Contacts::ContactID)
Script Set Selected Event ID
Set Variable ($$EventID ; Events::EventID)
Add another button to the layout and a new script.
Script: Create RSVP
# Check that a contact and event have been selected
If(isEmpty($$ContactID) or isEmpty($$EventID)
Exit Script
End If
# Get the payment info that has been entered
Set Variable ($PaymentInfo ; FORM::PaymentInfo)
# Create the RSVP Link record
Go To Layout(RSVP)
Create New Record
Set Field(fk_ContactID ; $$ContactID)
Set Field(fk_EventID ; $$EventID)
Set Field(PaymentInfo ; $PaymentInfo)
Commit Records
Go to Layout (Original Layout)
# Clear the search fields
Set Field(PaymentInfo; "")
Set Field(ContactSearch; "")
Set Field(EventSearch; "")
Set Variable($$ContactID; "")
Set Variable($$EventID; "")
Commit Records
Refresh Screen
Phew.
And you should be back, ready to search for Contacts, Events, and "Submit" the form to create more RSVPs.
FileMaker is fun, eh?