# How do I create a custom form?

**URL:** https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014
**Category:** Community Resources
**Created:** [April 1, 2021, 11:46am UTC](https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014 "2021-04-01T11:46:14Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![Darren\_Murphy](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/darren_murphy/32/47326_2.png) [@Darren\_Murphy](https://community.glideapps.com/u/Darren_Murphy)
#### Post date: [April 1, 2021, 11:46am UTC](https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014/1 "2021-04-01T11:46:15Z")

</div>

I’m just dropping this here so I have something to refer people to when they ask.

This is a simple concept app (copyable), that demonstrates the following techniques:

- Building custom forms for adding and editing list items (as an alternative to the native forms provided by Glide)
- Preventing duplicate new entries using [User Specific Columns](https://docs.glideapps.com/all/reference/data-editor/user-specific-columns) and [Relations](https://docs.glideapps.com/all/reference/data-editor/computed-columns/relation-column)
- Enforcing mandatory input items
- The use of visibility conditions and user specific booleans to control user flow

There is nothing particularly advanced here, but it does demonstrate a few concepts that new users sometimes appear to struggle with.

> **[Custom Forms Concept](https://go.glideapps.com/template/b14vKaiI7EdpOnDwXqHl-template-published?privateTemplateToken=roDYiT7y7kv3FrZh5xkY)**

Update 2021-11-16: If you’re wondering what a Custom Form actually is, or when you might want to use one, then please read this:

> [@Multi-step form](https://community.glideapps.com/t/multi-step-form/34556/4):
>
> A custom form is just a detail screen that’s designed to act like a form and uses entry components linked to user specific columns as the temporary placeholders for the data. Once you are done filling out the form, you can have a button with a custom action that will first have an Add Row action that will take those user specific column values and write them to a different table. You can then follow that action with a Set Column action that will clear the user specific columns so it’s ready fo…

Update 2021-12-26: Concept app has been updated, to take advantage of some newer features and techniques. Changes include:

- A working table has been added, and is used to prevent duplicates being created on edit (this makes use of the Remove Element from Array plugin)
- Names are trimmed to remove extra white space
- Actions have been “modernised” to keep Save buttons disabled while all required criteria are not met.

Update 2024-12-16: Created a new Concept App, which is available as a [template](https://go.glideapps.com/template/b14vKaiI7EdpOnDwXqHl-template-published?privateTemplateToken=roDYiT7y7kv3FrZh5xkY).

---

<div class="post-metadata">

### Author: ![ThinhDinh](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/thinhdinh/32/49_2.png) [@ThinhDinh](https://community.glideapps.com/u/ThinhDinh)
#### Post date: [April 1, 2021, 2:45pm UTC](https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014/2 "2021-04-01T14:45:40Z")

</div>

Thanks for making this!

---

<div class="post-metadata">

### Author: ![SuperMerabh](https://avatars.discourse-cdn.com/v4/letter/s/8491ac/32.png) [@SuperMerabh](https://community.glideapps.com/u/SuperMerabh)
#### Post date: [May 22, 2021, 5:58pm UTC](https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014/3 "2021-05-22T17:58:58Z")

</div>

@Darren_Murphy thank you so much for this. I’m totally inspired by your ideas and I’m trying to implement them on my app. I am bumping into one big problem…the “edit” button I added, won’t click! I duplicated everything you did on your app, so not sure what the problem is.

 ![Screen Shot 2021-05-22 at 12.58.10 PM](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/4/8/48f889a92b5397ab3e2f766dab8852e5150c4f7f.png)  
 ![Screen Shot 2021-05-22 at 12.58.27 PM](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/5/b/5b9dcf41de71e782a22872ac44722c6ba4f76640.png)

---

<div class="post-metadata">

### Author: ![Darren\_Murphy](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/darren_murphy/32/47326_2.png) [@Darren\_Murphy](https://community.glideapps.com/u/Darren_Murphy)
#### Post date: [May 23, 2021, 1:39am UTC](https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014/4 "2021-05-23T01:39:32Z")

</div>

The presence of that blue outline around your button suggests “select” mode. It’s not something as simple as being in the [wrong mode](https://docs.glideapps.com/all/reference/design-and-structure/play-and-select-mode), is it?

---

<div class="post-metadata">

### Author: ![SuperMerabh](https://avatars.discourse-cdn.com/v4/letter/s/8491ac/32.png) [@SuperMerabh](https://community.glideapps.com/u/SuperMerabh)
#### Post date: [May 23, 2021, 2:27pm UTC](https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014/5 "2021-05-23T14:27:44Z")

</div>

DUH 🤣

---

<div class="post-metadata">

### Author: ![AyS\_0908](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/ays_0908/32/27349_2.png) [@AyS\_0908](https://community.glideapps.com/u/AyS_0908)
#### Post date: [July 10, 2021, 1:47pm UTC](https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014/6 "2021-07-10T13:47:07Z")

</div>

Thank you @Darren_Murphy.  
Is there a real risk of duplication when we create Custom Form, cf. the use of User Specific in addition to the target column?

I have a Custom Form with 50 questions (in addition to relations etc), so I am a bit relunctant to double these columns…

Thanks in advance.

---

<div class="post-metadata">

### Author: ![Darren\_Murphy](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/darren_murphy/32/47326_2.png) [@Darren\_Murphy](https://community.glideapps.com/u/Darren_Murphy)
#### Post date: [July 10, 2021, 1:59pm UTC](https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014/7 "2021-07-10T13:59:25Z")

</div>

Being able to avoid duplicate entries (before they are created) is a nice side effect of using custom forms.  
If you’re using the standard Open Form method, then I’m not aware of any way you can stop duplicates from being created. So I guess it depends on whether or not that is important for your use case.

---

<div class="post-metadata">

### Author: ![Eric\_Penn](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/eric_penn/32/73888_2.png) [@Eric\_Penn](https://community.glideapps.com/u/Eric_Penn)
#### Post date: [July 10, 2021, 2:05pm UTC](https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014/8 "2021-07-10T14:05:34Z")

</div>

I haven’t tried but if you prefer the modal form @ThinhDinh suggests you could conditionally hide the submit button using CSS.

> [@Required fields when hidden](https://community.glideapps.com/t/required-fields-when-hidden/28882/4):
>
> If clients insist on a form I use CSS to control the submit button. \<pre\>\<span\>\<style\> [data-test="nav-button-Submit"] { pointer-events: none; opacity: 0.4; } Then I can conditionally control when to make this “visible”.

I’m actually in the process of redoing one of my larger forms in a details view. Copy paste all!! Thanks @Darren_Murphy for the custom forms write up. I like your use of the ITE column to decide if we could save or not.

---

<div class="post-metadata">

### Author: ![AyS\_0908](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/ays_0908/32/27349_2.png) [@AyS\_0908](https://community.glideapps.com/u/AyS_0908)
#### Post date: [July 10, 2021, 6:14pm UTC](https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014/10 "2021-07-10T18:14:51Z")

</div>

Thank you @Darren_Alderman.

My question was not accurate, sorry: my issue is that I need to create a Custom Form (cannot use the standard Open Form component), but I was wondering if I could do it without using the User Specific columns in addition to the ones which records the values?  
(the reason being that I have 50 questions, so using User Specific would mean x2 in terms of columns).

Incidentally, I have another issue: when I create my custom form with a “link to screen” button, I always have the value of the current row (which is not the case in your application).  
Do you have any clue on this?

Many thanks in advance for your help

---

<div class="post-metadata">

### Author: ![Darren\_Murphy](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/darren_murphy/32/47326_2.png) [@Darren\_Murphy](https://community.glideapps.com/u/Darren_Murphy)
#### Post date: [July 11, 2021, 6:20am UTC](https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014/11 "2021-07-11T06:20:31Z")

</div>

> [@AyS\_0908](#):
>
> My question was not accurate, sorry: my issue is that I need to create a Custom Form (cannot use the standard Open Form component), but I was wondering if I could do it without using the User Specific columns in addition to the ones which records the values?

I’ve never done that, so I’m not really sure. You might have to try it and see. I guess my concern is there might be a danger of over writing existing values.

> [@AyS\_0908](#):
>
> Incidentally, I have another issue: when I create my custom form with a “link to screen” button, I always have the value of the current row (which is not the case in your application).

Link to Screen → This Item should _always_ keep you on the current row. Are you saying that doesn’t happen in my sample app? I’d be skeptical of that.

---

<div class="post-metadata">

### Author: ![AyS\_0908](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/ays_0908/32/27349_2.png) [@AyS\_0908](https://community.glideapps.com/u/AyS_0908)
#### Post date: [July 11, 2021, 8:19am UTC](https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014/12 "2021-07-11T08:19:58Z")

</div>

> [@Darren\_Murphy](#):
>
> Link to Screen → This Item should _always_ keep you on the current row. Are you saying that doesn’t happen in my sample app? I’d be skeptical of that.

Hi, it works very well in your app; I tried to replicate it without User Specific but I don’t see how it’s possible.

- Test a: Button “Link to screen / this item”: opens screen with row 1 entries populated

- Test b: Button “Action \> Add row \> Link to screen”: it does create an empty row, but still opens a screen with row 1 entries populated; here I thought that it would have opened the newly created row…

![image](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/f/1/f1d6dda2fe22695541e7dd0ff2c0adc35ff55486.png)

---

<div class="post-metadata">

### Author: ![Jeff\_Hager](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/jeff_hager/32/43_2.png) [@Jeff\_Hager](https://community.glideapps.com/u/Jeff_Hager)
#### Post date: [July 11, 2021, 1:15pm UTC](https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014/13 "2021-07-11T13:15:38Z")

</div>

If I understand it correctly…or at least how I do it…is that I have a custom action that clears the USC columns prior to the Link To Screen action, and/or I clear the USC columns in a custom action after first Adding the Row. You shouldn’t be adding a row prior to the Link to Screen action. Really, in most cases, you will be editing the same (most likely the first) row every time you use and submit the form.

One suggestion I have is to create your 50 USC columns, but in a separate table with only one row. It will just be a work table to temporarily hold data while filling out the form. That way you can keep it separate from your form response table. Display your tab or screen using that new work table, fill out the form, and have it submit to you existing form response table.

---

<div class="post-metadata">

### Author: ![AyS\_0908](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/ays_0908/32/27349_2.png) [@AyS\_0908](https://community.glideapps.com/u/AyS_0908)
#### Post date: [July 11, 2021, 1:24pm UTC](https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014/14 "2021-07-11T13:24:00Z")

</div>

Thank you @Jeff_Hager, I will follow your suggestions.

(truth is that I have much more than 50 columns, because at least 15 of them require multiselect… cf. your post on this topic, and the app that you built, that I am “dissecting”)

---

<div class="post-metadata">

### Author: ![Darren\_Murphy](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/darren_murphy/32/47326_2.png) [@Darren\_Murphy](https://community.glideapps.com/u/Darren_Murphy)
#### Post date: [July 11, 2021, 1:46pm UTC](https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014/15 "2021-07-11T13:46:25Z")

</div>

> [@Jeff\_Hager](#):
>
> If I understand it correctly…or at least how I do it…is that I have a custom action that clears the USC columns prior to the Link To Screen action, and/or I clear the USC columns in a custom action after first Adding the Row. You shouldn’t be adding a row prior to the Link to Screen action. Really, in most cases, you will be editing the same (most likely the first) row every time you use and submit the form.

Yep, this is what I usually do. Although sometimes I’ll leave the user specific columns intact, and use them to build a CSS table to present the row that’s just been created, and give the user an opportunity to review and/or edit it. So I’ll show the user the table, plus a button bar with “Edit” and “Go Back” options. If they choose Edit, then they get an edit form pre-populated with the User Specific values, and if they choose “Go Back”, only then I’ll clear the User Specific columns.

> [@Jeff\_Hager](#):
>
> One suggestion I have is to create your 50 USC columns, but in a separate table with only one row. It will just be a work table to temporarily hold data while filling out the form. That way you can keep it separate from your form response table. Display your tab or screen using that new work table, fill out the form, and have it submit to you existing form response table.

Yes, I do this a lot. 👍

---

<div class="post-metadata">

### Author: ![Mns\_Glide](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/mns_glide/32/2514_2.png) [@Mns\_Glide](https://community.glideapps.com/u/Mns_Glide)
#### Post date: [August 15, 2021, 7:38am UTC](https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014/16 "2021-08-15T07:38:48Z")

</div>

Using this method, if I am pointing to a Glide Table that is new, I do not have access to the global User data…How to make it accessible? For example, I want to do column for Name, Photo and so on…

Thanks

---

<div class="post-metadata">

### Author: ![Darren\_Murphy](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/darren_murphy/32/47326_2.png) [@Darren\_Murphy](https://community.glideapps.com/u/Darren_Murphy)
#### Post date: [August 15, 2021, 7:43am UTC](https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014/17 "2021-08-15T07:43:27Z")

</div>

Are you wanting to:

- Add a new row to your User Profiles table,
- Update an existing row in your User Profiles table, or
- Reference columns in your User Profiles table?

---

<div class="post-metadata">

### Author: ![Mns\_Glide](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/mns_glide/32/2514_2.png) [@Mns\_Glide](https://community.glideapps.com/u/Mns_Glide)
#### Post date: [August 15, 2021, 8:18am UTC](https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014/18 "2021-08-15T08:18:29Z")

</div>

You can see here the differences. I setup two buttons pointing to the same Glide Table,

1. one to show form when clicked
2. one to show new screen when clicked

you can see that 1. will allow me access to User’s Information and 2. does not. What I want is ability to access User’s Information in 2.

 ![form2a](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/0/4/0405548975c55a7c8e316aa84cec0294e050436e.jpeg)  
“Button Show Form”

 ![form2b](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/f/9/f932dc32b2840f282a4b688d284b19f8afcf7375.jpeg)  
“Show Form can access User’s Data”

 ![form2c](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/e/9/e9fad772b58d6c697e379b55bf99a8c8b148cb4e.jpeg)  
“Button Show New Screen”

 ![form2d](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/f/c/fc5904d691805694eee9e65d8f52e68460602b4c.jpeg)  
Cannot find User’s data

---

<div class="post-metadata">

### Author: ![Darren\_Murphy](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/darren_murphy/32/47326_2.png) [@Darren\_Murphy](https://community.glideapps.com/u/Darren_Murphy)
#### Post date: [August 15, 2021, 8:23am UTC](https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014/19 "2021-08-15T08:23:58Z")

</div>

You didn’t answer my question 🙂

---

<div class="post-metadata">

### Author: ![Mns\_Glide](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/mns_glide/32/2514_2.png) [@Mns\_Glide](https://community.glideapps.com/u/Mns_Glide)
#### Post date: [August 15, 2021, 8:25am UTC](https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014/20 "2021-08-15T08:25:54Z")

</div>

Oh yes. Reference columns in User Profiles table

---

<div class="post-metadata">

### Author: ![Darren\_Murphy](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/darren_murphy/32/47326_2.png) [@Darren\_Murphy](https://community.glideapps.com/u/Darren_Murphy)
#### Post date: [August 15, 2021, 8:38am UTC](https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014/21 "2021-08-15T08:38:26Z")

</div>

Okay. So it depends on whether or not you’re using row owners. If you are, just add a component and you’ll find that you can use columns from your User Profiles as the source. Row owners will ensure that you’re selecting from the row that belongs to the currently signed in user.

If you’re not using row owners, then it’s a little trickier. Essentially you’d need to create a single relation between the current table and your User Profiles table (using a template containing the current users ID or email address), and then import whatever columns you need using lookups via that relation.

This might be a case where a custom form isn’t a good choice - I can’t say for sure.

[Next page](https://community.glideapps.com/t/how-do-i-create-a-custom-form/25014.md?page=2)
