Skuid Superbank Mobile Composer - Upload Attachment

  • 2
  • Question
  • Updated 4 years ago
  • Answered
In the Skuid Superbank release note it says:

Mobile Composer.
  • Upload and view multiple attachments.
I have installed the RC in my sandbox but I can't find any components anywhere in the mobile composer that allows this. I can't find any documentation on this either. Can someone point me where to go to get this functionality? Thanks.
Photo of Jsun Pe

Jsun Pe

  • 230 Points 100 badge 2x thumb

Posted 4 years ago

  • 2
Photo of Raj

Raj

  • 442 Points 250 badge 2x thumb
Have you find any workaround for this ? 
Photo of Zach McElrath

Zach McElrath, Employee

  • 49,056 Points 20k badge 2x thumb
Raj,

Please install the latest version of Skuid Superbank from the Skuid Releases page, this fixes a bug that prevented the File Upload component from showing in the Mobile Composer. The File Upload component is documented here (for Desktop), but the functionality is similar.
Photo of Raj

Raj

  • 442 Points 250 badge 2x thumb
Hi Zach,
I am able to upload the document in desktop version without any issues. But i followed the same for mobile upload option, i found the below error  and also document upload is not working in skuid page.. pls help me out.. 

<skuidpage unsavedchangeswarning="yes">   <models>
      <model id="AttachmentModel" limit="1" query="true" createrowifnonefound="true" doclone="no" sobject="Attachment" orderby="Bodylength asc">
         <fields>
            <field id="Id"/>
            <field id="Body"/>
            <field id="BodyLength"/>
            <field id="ContentType"/>
            <field id="CreatedById"/>
            <field id="CreatedBy.Name"/>
            <field id="CreatedDate"/>
            <field id="IsDeleted"/>
            <field id="Description"/>
            <field id="Name"/>
            <field id="LastModifiedById"/>
            <field id="LastModifiedBy.Name"/>
            <field id="LastModifiedDate"/>
            <field id="OwnerId"/>
            <field id="Owner.Name"/>
            <field id="ParentId"/>
            <field id="Parent.Name"/>
            <field id="IsPrivate"/>
            <field id="SystemModstamp"/>
         </fields>
         <conditions>
            <condition type="fieldvalue" value="006N0000004t5j5" enclosevalueinquotes="true" operator="=" state="" field="ParentId"/>
         </conditions>
      </model>
   </models>
   <components>
      <skuidmobile>
         <mobilepanels>
            <mobilepanel minwidth="200" uniqueid="Attachment">
               <components>
                  <file storeas="record" displayas="filename" model="AttachmentModel">
                     <renderconditions logictype="and"/>
                  </file>
                  <mobiledeck showsavecancel="true" searchmethod="server" searchbox="true" tokenizesearch="true" createrecords="false" precision="1" minwidth="100" model="AttachmentModel" mode="edit" emptysearchbehavior="query">
                     <components>
                        <mobilegrid precision="1" minwidth="100">
                           <divisions>
                              <division size="1">
                                 <components>
                                    <mobilefield id="Parent.Name" valuehalign="" type="">
                                       <renderconditions logictype="and" onhidedatabehavior="keep"/>
                                    </mobilefield>
                                    <mobilefield id="Name" valuehalign="" type="">
                                       <renderconditions logictype="and" onhidedatabehavior="keep"/>
                                    </mobilefield>
                                    <mobilefield id="Description" valuehalign="" type="">
                                       <renderconditions logictype="and" onhidedatabehavior="keep"/>
                                    </mobilefield>
                                    <mobileimage source="attachment" field="Body" uniqueid="imageId">
                                       <renderconditions logictype="and"/>
                                       <styles>
                                          <styleitem property="height" value="10%"/>
                                       </styles>
                                    </mobileimage>
                                 </components>
                                 <renderconditions logictype="and"/>
                              </division>
                           </divisions>
                        </mobilegrid>
                     </components>
                     <searchfields/>
                     <aftersaveactions/>
                     <renderconditions logictype="and"/>
                  </mobiledeck>
               </components>
            </mobilepanel>
         </mobilepanels>
         <mobilenavs>
            <mobilenav uniqueid="Main">
               <components/>
            </mobilenav>
         </mobilenavs>
      </skuidmobile>
   </components>
   <resources>
      <labels/>
      <javascript/>
      <css/>
   </resources>
</skuidpage>
Photo of Zach McElrath

Zach McElrath, Employee

  • 49,056 Points 20k badge 2x thumb
Raj,

The SObject for your Model needs to be on the object that you want to attach to --- for example, if you want to upload attachments to an Account record, the Model that the File Upload component is associated with needs to be an Account Model, not an Attachment model.
Photo of Raj

Raj

  • 442 Points 250 badge 2x thumb
Thanks Zach!!
Photo of Raj

Raj

  • 442 Points 250 badge 2x thumb
Zach!! When i am trying to attach the document for existing record, the file upload works for mobile version. But when i create the new record and try to upload, it does not seems to work. In desktop version, there is option for Action properties as per the document link you shared. But pls mention which component is available for mobile version.  ( I tried to reload the new record data model using after save actions but it does not work) 

TA
Photo of Zach McElrath

Zach McElrath, Employee

  • 49,056 Points 20k badge 2x thumb
Raj, I don't think I understand your question completely, but one thing to consider is that the File Upload component only works when attaching to already-saved records --- so you will probably want to use Conditional Rendering to wait to only show the File Upload component when the record you are attaching to is saved.
Photo of Raj

Raj

  • 442 Points 250 badge 2x thumb
1) First step, I am creating the new record in Oppty object and after creating new record that I redirect to new Main panel
2) In new panel i am trying to upload the files for the new record which i created in First step. This is not working here.

Please let me know how this can be done. Reference code for this issue.

<skuidpage unsavedchangeswarning="" theme="MobileClassic">   <models>
      <model id="CurrentUserModel" limit="20" query="true" createrowifnonefound="false" doclone="no" sobject="User">
         <fields>
            <field id="Name"/>
            <field id="CompanyName"/>
            <field id="Username"/>
            <field id="SenderName"/>
            <field id="Email"/>
            <field id="Id"/>
            <field id="FullPhotoUrl"/>
            <field id="SmallPhotoUrl"/>
         </fields>
         <conditions>
            <condition type="userinfo" value="" operator="=" state="" enclosevalueinquotes="true" userinfotype="userid" field="Id"/>
         </conditions>
      </model>
      <model id="AttachmentModel" limit="10" query="true" createrowifnonefound="true" doclone="no" sobject="Attachment">
         <fields>
            <field id="Id"/>
            <field id="BodyLength"/>
            <field id="ContentType"/>
            <field id="Description"/>
            <field id="OwnerId"/>
            <field id="Owner.Name"/>
            <field id="Name"/>
            <field id="ParentId"/>
            <field id="Parent.Name"/>
            <field id="Body"/>
         </fields>
         <conditions>
            <condition type="modelmerge" value="" operator="=" state="filterableon" field="ParentId" mergefield="Id" novaluebehavior="noquery" inactive="false" model="OpptyModel" enclosevalueinquotes="true" name="ParentId"/>
         </conditions>
      </model>
      <model id="OpptyModel" limit="1" query="false" createrowifnonefound="true" doclone="no" sobject="Opportunity">
         <fields>
            <field id="AccountId"/>
            <field id="Account.Name"/>
            <field id="Brand_report__c"/>
            <field id="Brand_Name__c"/>
            <field id="Opportunity_Name_Reports__c"/>
            <field id="Id"/>
            <field id="Name"/>
            <field id="OwnerId"/>
            <field id="Owner.Name"/>
            <field id="StageName"/>
            <field id="CloseDate"/>
         </fields>
         <conditions/>
      </model>
   </models>
   <components>
      <skuidmobile>
         <mobilepanels>
            <mobilepanel minwidth="200" uniqueid="CreateRequest">
               <components>
                  <mobiledeck showsavecancel="true" searchmethod="server" searchbox="false" tokenizesearch="false" createrecords="false" precision="1" minwidth="400" model="OpptyModel" mode="edit" emptysearchbehavior="query">
                     <components>
                        <mobilegrid precision="1" minwidth="100">
                           <divisions>
                              <division size="1">
                                 <components>
                                    <mobilefield id="AccountId" valuehalign="" optionsource="" required="false" type="">
                                       <searchfields/>
                                       <filters/>
                                       <renderconditions logictype="and" onhidedatabehavior="keep"/>
                                    </mobilefield>
                                 </components>
                                 <renderconditions logictype="and"/>
                              </division>
                              <division size="1">
                                 <components>
                                    <mobilefield id="OwnerId" valuehalign="" type="" optionsource="" readonly="true" showhelp="false">
                                       <filters/>
                                       <renderconditions logictype="and" onhidedatabehavior="keep"/>
                                    </mobilefield>
                                 </components>
                                 <renderconditions logictype="and"/>
                              </division>
                              <division size="1">
                                 <components>
                                    <mobilefield id="Name" valuehalign="" required="true" addnoneoption="true" type="">
                                       <renderconditions logictype="and" onhidedatabehavior="keep"/>
                                    </mobilefield>
                                 </components>
                                 <renderconditions logictype="and"/>
                              </division>
                           </divisions>
                        </mobilegrid>
                        <mobilefield id="CloseDate" valuehalign="" type="">
                           <renderconditions logictype="and" onhidedatabehavior="keep"/>
                        </mobilefield>
                        <mobilefield id="StageName" valuehalign="" type="">
                           <renderconditions logictype="and" onhidedatabehavior="keep"/>
                        </mobilefield>
                     </components>
                     <searchfields/>
                     <aftersaveactions>
                        <action type="setMainPanel" panel="AttachmentPanel"/>
                     </aftersaveactions>
                     <renderconditions logictype="and"/>
                     <title>Create Request</title>
                     <cardinteractions/>
                  </mobiledeck>
               </components>
               <interactions/>
            </mobilepanel>
            <mobilepanel minwidth="50" uniqueid="Navigation">
               <components>
                  <mobilegrid precision="1" minwidth="50">
                     <divisions>
                        <division size="1">
                           <components>
                              <mobilebutton label="New Request" style="list" icon="sk-icon-product">
                                 <actions>
                                    <action type="setMainPanel" panel="CreateRequest"/>
                                 </actions>
                                 <renderconditions logictype="and"/>
                              </mobilebutton>
                           </components>
                           <renderconditions logictype="and"/>
                        </division>
                     </divisions>
                  </mobilegrid>
               </components>
               <interactions>
                  <interaction type="tap">
                     <actions>
                        <action type="hideLeftPanel"/>
                     </actions>
                  </interaction>
               </interactions>
            </mobilepanel>
            <mobilepanel minwidth="200" uniqueid="AttachmentPanel">
               <components>
                  <mobiledeck showsavecancel="false" searchmethod="server" searchbox="true" tokenizesearch="true" createrecords="false" precision="1" minwidth="400" model="OpptyModel" mode="read" emptysearchbehavior="query">
                     <components>
                        <mobilefield id="Name" valuehalign="" type="">
                           <renderconditions logictype="and" onhidedatabehavior="keep"/>
                        </mobilefield>
                     </components>
                     <searchfields/>
                     <aftersaveactions/>
                     <renderconditions logictype="and"/>
                     <cardinteractions/>
                  </mobiledeck>
                  <file storeas="record" displayas="filename" model="OpptyModel">
                     <renderconditions logictype="and"/>
                  </file>
                  <mobiledeck showsavecancel="true" searchmethod="server" searchbox="false" tokenizesearch="false" createrecords="true" precision="1" minwidth="400" model="AttachmentModel" mode="edit" emptysearchbehavior="query">
                     <components>
                        <mobilegrid precision="2" minwidth="100">
                           <divisions>
                              <division size="1">
                                 <components>
                                    <mobilefield id="Parent.Name" valuehalign="" type="">
                                       <renderconditions logictype="and" onhidedatabehavior="keep"/>
                                    </mobilefield>
                                 </components>
                                 <renderconditions logictype="and"/>
                                 <interactions/>
                              </division>
                              <division size="1">
                                 <components>
                                    <mobilefield id="Description" valuehalign="" type="">
                                       <renderconditions logictype="and" onhidedatabehavior="keep"/>
                                    </mobilefield>
                                    <mobilefield id="Name" valuehalign="" type="">
                                       <renderconditions logictype="and" onhidedatabehavior="keep"/>
                                    </mobilefield>
                                 </components>
                                 <renderconditions logictype="and"/>
                              </division>
                           </divisions>
                        </mobilegrid>
                     </components>
                     <searchfields/>
                     <aftersaveactions/>
                     <renderconditions logictype="and"/>
                     <title>AttachementDeck</title>
                  </mobiledeck>
               </components>
               <interactions/>
            </mobilepanel>
         </mobilepanels>
         <mobilenavs>
            <mobilenav uniqueid="ReturnAppHeader">
               <components>
                  <mobilegrid precision="6" minwidth="50">
                     <divisions>
                        <division size="1">
                           <components>
                              <mobilebutton label="" style="nav" icon="fa-th-list">
                                 <actions>
                                    <action type="setLeftPanel" panel="Navigation"/>
                                 </actions>
                                 <renderconditions logictype="and"/>
                              </mobilebutton>
                           </components>
                           <renderconditions logictype="and"/>
                        </division>
                        <division size="4">
                           <components/>
                           <renderconditions logictype="and"/>
                           <interactions>
                              <interaction type="tap">
                                 <actions/>
                              </interaction>
                           </interactions>
                        </division>
                        <division size="1">
                           <components>
                              <mobilebutton label="" style="nav" icon="fa-home">
                                 <actions>
                                    <action type="setMainPanel" panel="Profile"/>
                                 </actions>
                                 <renderconditions logictype="and"/>
                              </mobilebutton>
                           </components>
                           <renderconditions logictype="and"/>
                        </division>
                     </divisions>
                  </mobilegrid>
               </components>
            </mobilenav>
         </mobilenavs>
      </skuidmobile>
   </components>
   <resources>
      <labels/>
      <css/>
      <javascript/>
   </resources>
</skuidpage>
(Edited)
Photo of Raj

Raj

  • 442 Points 250 badge 2x thumb
Hi Zach!! The workaround i have done here is 
1) Created the oppty Record (Panel 1) 
2) Redirect to detail Oppty Record(Panel2) 
3) created the upload options over there.. 
Its works now. Pls let me know this is ideal approach? 
Photo of Rob Hatch

Rob Hatch, Official Rep

  • 44,006 Points 20k badge 2x thumb
Raj,  your approach is workable. Basically you need to ensure that the Oppty record is saved before exposing the upload options.  There are a number of ways to do this.  Yours works. 

Let us know if you have other questions. 
Photo of Jsun Pe

Jsun Pe

  • 230 Points 100 badge 2x thumb
It worked - thanks. Now my next thing to tackle is how to display it properly... please see my other post: 
https://community.skuidify.com/skuid/topics/how-to-build-nested-decks-in-skuid-mobile-composer