-
ChatterFeed
-
0Best Answers
-
2Likes Received
-
0Likes Given
-
5Questions
-
8Replies
Email Report to a group of users on an hourly basis during business hours
Hi All,
I have a requirement of scheduling an email in such a way that it consists of a report data, and is sent to a group of users who are part of a public group, every hour during the business hours.
I know that the standard report schedule cannot be created to run on an hourly basis. I have already tried with an apex schedulable class that sends a report every hour to the group of users, but it sends the information by downloading the report data in a CSV file. However, is that possible that the email itself contains report data, just like the standard salesforce functionality does?
I have a requirement of scheduling an email in such a way that it consists of a report data, and is sent to a group of users who are part of a public group, every hour during the business hours.
I know that the standard report schedule cannot be created to run on an hourly basis. I have already tried with an apex schedulable class that sends a report every hour to the group of users, but it sends the information by downloading the report data in a CSV file. However, is that possible that the email itself contains report data, just like the standard salesforce functionality does?
- Shobhit Saxena
- November 20, 2017
- Like
- 0
dynamically showing detail page while adding child records
I am having a visualforce page which is located on the sidebar,when we are on a record detail page.
Clicking on a button creates a record of Activity that is related to the record which is opened,
I want to achieve the functionality where I could see the newly created record on the related list of the opened record, without having to reload the page for that.
Is it achievable? Can anyone Help?
Clicking on a button creates a record of Activity that is related to the record which is opened,
I want to achieve the functionality where I could see the newly created record on the related list of the opened record, without having to reload the page for that.
Is it achievable? Can anyone Help?
- Shobhit Saxena
- April 06, 2017
- Like
- 0
I wanna override the Notes & Attachments related list with a Visualforce page,providing the same functionality.
I wanna override the Notes & Attachments related list with a Visualforce page,providing the same functionality.Please help.
- Shobhit Saxena
- June 21, 2016
- Like
- 0
Trailhead challenge:"Connect components with Events"
The campingList JavaScript controller isn't setting the 'item' as a parameter or saving the record correctly.
My code is as follows:
1---Camping List Component
2---Camping List Controller
3---Camping List Helper
Empty
4---Camping List Form
5---CampingListFormController
6---CampingListFormHelper
I am still getting this error:
Any help would be appreciated.
My code is as follows:
1---Camping List Component
<aura:component controller="CampingListController"> <aura:handler name="init" action="{!c.doInit}" value="{!this}"/> <aura:handler name="addItem" event="c:addItemEvent" action="{!c.handleAddItem }"/> <aura:attribute name="newItem" type="Camping_Item__c" default="{ 'sobjectType': 'Camping_Item__c', 'Name': '', 'Quantity__c': 0, 'Price__c': 0, 'Packed__c': false }"/> <aura:attribute name="items" type="Camping_Item__c[]"/> <ol> <li>Bug Spray</li> <li>Bear Repellant</li> <li>Goat Food</li> </ol> <!-- NEW EXPENSE FORM --> <div class="slds-col slds-col--padded slds-p-top--large"> <c:campingListForm/> </div> <!-- / NEW EXPENSE FORM --> <div class="slds-card slds-p-top--medium"> <header class="slds-card__header"> <h3 class="slds-text-heading--small">Items</h3> </header> <section class="slds-card__body"> <div id="list" class="row"> <aura:iteration items="{!v.items}" var="items"> <c:campingListItem item="{!item}"/> </aura:iteration> </div> </section> </div> </aura:component>
2---Camping List Controller
({ // Load items from Salesforce doInit: function(component, event, helper) { // Create the action var action = component.get("c.getItems"); // Add callback behavior for when response is received action.setCallback(this, function(response) { var state = response.getState(); if (component.isValid() && state === "SUCCESS") { component.set("v.items", response.getReturnValue()); } else { console.log("Failed with state: " + state); } }); // Send action off to be executed $A.enqueueAction(action); }, handleAddItem: function(component, event, helper) { var newItem = event.getParam("item"); //helper.createItem(component, newItem); this.saveItem(component, item, function(response){ var state = response.getState(); if (component.isValid() && state === "SUCCESS") { var items = component.get("v.items"); items.push(response.getReturnValue()); component.set("v.items", items); } } } })
3---Camping List Helper
Empty
4---Camping List Form
<aura:component > <aura:registerEvent name="addItem" type="c:addItemEvent"/> <!-- CREATE NEW ITEM FORM --> <form class="slds-form--stacked"> <div class="slds-form-element slds-is-required"> <div class="slds-form-element__control"> <ui:inputText aura:id="itemname" label="Name" class="slds-input" labelClass="slds-form-element__label" value="{!v.newItem.Name}" required="true"/> </div> </div> <div class="slds-form-element slds-is-required"> <div class="slds-form-element__control"> <ui:inputNumber aura:id="quantity" label="Quantity" class="slds-input" labelClass="slds-form-element__label" value="{!v.newItem.Quantity__c}" required="true"/> </div> </div> <div class="slds-form-element"> <div class="slds-form-element__control"> <ui:inputCurrency aura:id="price" label="Price" class="slds-input" labelClass="slds-form-element__label" value="{!v.newItem.Price__c}" /> </div> </div> <div class="slds-form-element"> <ui:inputCheckbox aura:id="packed" label="Packed?" class="slds-checkbox" labelClass="slds-form-element__label" value="{!v.newItem.Packed__c}"/> </div> <div class="slds-form-element"> <ui:button label="Create Camping Item" class="slds-button slds-button--brand" press="{!c.clickCreateItem}"/> </div> </form> <!-- / CREATE NEW ITEM FORM --> </aura:component>
5---CampingListFormController
({ clickCreateItem: function(component, event, helper) { if(helper.validateItemForm(component)){ // Create the new item var newItem = component.get("v.newItem"); helper.createItem(component, newItem); } } })
6---CampingListFormHelper
({ createItem: function(component, newItem) { var createItem = component.getItem("createItem"); createItem.setParams({ "item": item }); createItem.fire(); component.set("v.newItem",{ 'sobjectType': 'Camping_Item__c', 'Name': '', 'Quantity__c': 0, 'Price__c': 0, 'Packed__c': false }/>); }, validateItemForm: function(component) { // Simplistic error checking var validItem = true; // Name must not be blank var nameField = component.find("itemname"); var itemname = nameField.get("v.value"); if ($A.util.isEmpty(itemname)){ validItem = false; nameField.set("v.errors", [{message:"Item name can't be blank."}]); } else { nameField.set("v.errors", null); } // Quantity must not be blank var quantityField = component.find("quantity"); var quantity = nameField.get("v.value"); if ($A.util.isEmpty(quantity)){ validItem = false; quantityField.set("v.errors", [{message:"Quantity can't be blank."}]); } else { quantityField.set("v.errors", null); } // Price must not be blank var priceField = component.find("price"); var price = priceField.get("v.value"); if ($A.util.isEmpty(price)){ validItem = false; priceField.set("v.errors", [{message:"Price can't be blank."}]); } else { quantityField.set("v.errors", null); } return validItem; } })
I am still getting this error:
Any help would be appreciated.
- Shobhit Saxena
- June 10, 2016
- Like
- 2
Lightning Components Basics: "Input Data using Forms challenge"-How to reset an aura attribute?
I am stuck at this point:
I just want to know what is going to be the syntax for resetting the newItem value provider with a Camping_Item__c sObject??
My Code is as follows:
(1) campingList Component:
(2) Controller code:
I just want to know what is going to be the syntax for resetting the newItem value provider with a Camping_Item__c sObject??
My Code is as follows:
(1) campingList Component:
<aura:component > <aura:attribute name="newItem" type="Camping_Item__c" default="{ 'sobjectType': 'Camping_Item__c', 'Name': '', 'Quantity__c': 0, 'Price__c': 0, 'Packed__c': false }"/> <aura:attribute name="items" type="Camping_Item__c[]"/> <ol> <li>Bug Spray</li> <li>Bear Repellant</li> <li>Goat Food</li> </ol> <!-- CREATE NEW ITEM FORM --> <form class="slds-form--stacked"> <div class="slds-form-element slds-is-required"> <div class="slds-form-element__control"> <ui:inputText aura:id="itemname" label="Name" class="slds-input" labelClass="slds-form-element__label" value="{!v.newItem.Name}" required="true"/> </div> </div> <div class="slds-form-element slds-is-required"> <div class="slds-form-element__control"> <ui:inputNumber aura:id="quantity" label="Quantity" class="slds-input" labelClass="slds-form-element__label" value="{!v.newItem.Quantity__c}" required="true"/> </div> </div> <div class="slds-form-element"> <div class="slds-form-element__control"> <ui:inputCurrency aura:id="price" label="Price" class="slds-input" labelClass="slds-form-element__label" value="{!v.newItem.Price__c}" /> </div> </div> <div class="slds-form-element"> <ui:inputCheckbox aura:id="packed" label="Packed?" class="slds-checkbox" labelClass="slds-form-element__label" value="{!v.newItem.Packed__c}"/> </div> <div class="slds-form-element"> <ui:button label="Create Camping Item" class="slds-button slds-button--brand" press="{!c.clickCreateItem}"/> </div> </form> <!-- / CREATE NEW ITEM FORM --> <div class="slds-card slds-p-top--medium"> <header class="slds-card__header"> <h3 class="slds-text-heading--small">Items</h3> </header> <section class="slds-card__body"> <div id="list" class="row"> <aura:iteration items="{!v.items}" var="items"> <c:campingListItem item="{!item}"/> </aura:iteration> </div> </section> </div> </aura:component>
(2) Controller code:
({ clickCreateItem: function(component, event, helper) { // Simplistic error checking var validItem = true; // Name must not be blank var nameField = component.find("itemname"); var itemname = nameField.get("v.value"); if ($A.util.isEmpty(itemname)){ validItem = false; nameField.set("v.errors", [{message:"Item name can't be blank."}]); } else { nameField.set("v.errors", null); } // Quantity must not be blank var quantityField = component.find("quantity"); var quantity = nameField.get("v.value"); if ($A.util.isEmpty(quantity)){ validItem = false; quantityField.set("v.errors", [{message:"Quantity can't be blank."}]); } else { quantityField.set("v.errors", null); } var priceField = component.find("price"); var price = priceField.get("v.value"); if ($A.util.isEmpty(price)){ validItem = false; priceField.set("v.errors", [{message:"Price can't be blank."}]); } else { quantityField.set("v.errors", null); } if(validItem){ var newItem = component.get("v.newItem"); console.log("Create item: " + JSON.stringify(newItem)); //helper.createItem(component, newItem); // var theItems = component.get("v.items"); // Copy the expense to a new object // THIS IS A DISGUSTING, TEMPORARY HACK var newItem = JSON.parse(JSON.stringify(item)); console.log("Items before 'create': " + JSON.stringify(theItems)); theExpenses.push(newItem); component.set("v.expenses", theItems); console.log("Items after 'create': " + JSON.stringify(theItems)); theItems.push(newItem); component.set("v.items", theItems); } } })
- Shobhit Saxena
- June 10, 2016
- Like
- 0
Trailhead challenge:"Connect components with Events"
The campingList JavaScript controller isn't setting the 'item' as a parameter or saving the record correctly.
My code is as follows:
1---Camping List Component
2---Camping List Controller
3---Camping List Helper
Empty
4---Camping List Form
5---CampingListFormController
6---CampingListFormHelper
I am still getting this error:
Any help would be appreciated.
My code is as follows:
1---Camping List Component
<aura:component controller="CampingListController"> <aura:handler name="init" action="{!c.doInit}" value="{!this}"/> <aura:handler name="addItem" event="c:addItemEvent" action="{!c.handleAddItem }"/> <aura:attribute name="newItem" type="Camping_Item__c" default="{ 'sobjectType': 'Camping_Item__c', 'Name': '', 'Quantity__c': 0, 'Price__c': 0, 'Packed__c': false }"/> <aura:attribute name="items" type="Camping_Item__c[]"/> <ol> <li>Bug Spray</li> <li>Bear Repellant</li> <li>Goat Food</li> </ol> <!-- NEW EXPENSE FORM --> <div class="slds-col slds-col--padded slds-p-top--large"> <c:campingListForm/> </div> <!-- / NEW EXPENSE FORM --> <div class="slds-card slds-p-top--medium"> <header class="slds-card__header"> <h3 class="slds-text-heading--small">Items</h3> </header> <section class="slds-card__body"> <div id="list" class="row"> <aura:iteration items="{!v.items}" var="items"> <c:campingListItem item="{!item}"/> </aura:iteration> </div> </section> </div> </aura:component>
2---Camping List Controller
({ // Load items from Salesforce doInit: function(component, event, helper) { // Create the action var action = component.get("c.getItems"); // Add callback behavior for when response is received action.setCallback(this, function(response) { var state = response.getState(); if (component.isValid() && state === "SUCCESS") { component.set("v.items", response.getReturnValue()); } else { console.log("Failed with state: " + state); } }); // Send action off to be executed $A.enqueueAction(action); }, handleAddItem: function(component, event, helper) { var newItem = event.getParam("item"); //helper.createItem(component, newItem); this.saveItem(component, item, function(response){ var state = response.getState(); if (component.isValid() && state === "SUCCESS") { var items = component.get("v.items"); items.push(response.getReturnValue()); component.set("v.items", items); } } } })
3---Camping List Helper
Empty
4---Camping List Form
<aura:component > <aura:registerEvent name="addItem" type="c:addItemEvent"/> <!-- CREATE NEW ITEM FORM --> <form class="slds-form--stacked"> <div class="slds-form-element slds-is-required"> <div class="slds-form-element__control"> <ui:inputText aura:id="itemname" label="Name" class="slds-input" labelClass="slds-form-element__label" value="{!v.newItem.Name}" required="true"/> </div> </div> <div class="slds-form-element slds-is-required"> <div class="slds-form-element__control"> <ui:inputNumber aura:id="quantity" label="Quantity" class="slds-input" labelClass="slds-form-element__label" value="{!v.newItem.Quantity__c}" required="true"/> </div> </div> <div class="slds-form-element"> <div class="slds-form-element__control"> <ui:inputCurrency aura:id="price" label="Price" class="slds-input" labelClass="slds-form-element__label" value="{!v.newItem.Price__c}" /> </div> </div> <div class="slds-form-element"> <ui:inputCheckbox aura:id="packed" label="Packed?" class="slds-checkbox" labelClass="slds-form-element__label" value="{!v.newItem.Packed__c}"/> </div> <div class="slds-form-element"> <ui:button label="Create Camping Item" class="slds-button slds-button--brand" press="{!c.clickCreateItem}"/> </div> </form> <!-- / CREATE NEW ITEM FORM --> </aura:component>
5---CampingListFormController
({ clickCreateItem: function(component, event, helper) { if(helper.validateItemForm(component)){ // Create the new item var newItem = component.get("v.newItem"); helper.createItem(component, newItem); } } })
6---CampingListFormHelper
({ createItem: function(component, newItem) { var createItem = component.getItem("createItem"); createItem.setParams({ "item": item }); createItem.fire(); component.set("v.newItem",{ 'sobjectType': 'Camping_Item__c', 'Name': '', 'Quantity__c': 0, 'Price__c': 0, 'Packed__c': false }/>); }, validateItemForm: function(component) { // Simplistic error checking var validItem = true; // Name must not be blank var nameField = component.find("itemname"); var itemname = nameField.get("v.value"); if ($A.util.isEmpty(itemname)){ validItem = false; nameField.set("v.errors", [{message:"Item name can't be blank."}]); } else { nameField.set("v.errors", null); } // Quantity must not be blank var quantityField = component.find("quantity"); var quantity = nameField.get("v.value"); if ($A.util.isEmpty(quantity)){ validItem = false; quantityField.set("v.errors", [{message:"Quantity can't be blank."}]); } else { quantityField.set("v.errors", null); } // Price must not be blank var priceField = component.find("price"); var price = priceField.get("v.value"); if ($A.util.isEmpty(price)){ validItem = false; priceField.set("v.errors", [{message:"Price can't be blank."}]); } else { quantityField.set("v.errors", null); } return validItem; } })
I am still getting this error:
Any help would be appreciated.
- Shobhit Saxena
- June 10, 2016
- Like
- 2
Lightning Components Basics - Input Data Using Forms
Problem Statement:
Create a form to enter new items and display the list of items entered. To make our camping list look more appealing, change the campingHeader component to use the SLDS. Similar to the unit, style the Camping List H1 inside the slds-page-header. Modify the campingList component to contain an input form and an iteration of campingListItem components for displaying the items entered.
My Code:
CampingList.cmp
Could anyone help pass and run the challenge.
Thanks.
Create a form to enter new items and display the list of items entered. To make our camping list look more appealing, change the campingHeader component to use the SLDS. Similar to the unit, style the Camping List H1 inside the slds-page-header. Modify the campingList component to contain an input form and an iteration of campingListItem components for displaying the items entered.
- The component requires an attribute named items with the type of an array of camping item custom objects.
- The component requires an attribute named newItem of type Camping_Item__c with default quantity and price values of 0.
- The component displays the Name, Quantity, Price, and Packed form fields with the appropriate input component types and values from the newItem attribute.
- The JavaScript controller checks to ensure that the Name, Quantity and Price values submitted are not null.
- If the form is valid, the JavaScript controller pushes the newItem onto the array of existing items, triggers the notification that the items value provider has changed, and resets the newItem value provider with a blank sObjectType of Camping_Item__c.
My Code:
CampingList.cmp
<aura:component > <ol> <li>Bug Spray</li> <li>Bear Repellant</li> <li>Goat Food</li> </ol> <aura:attribute name="items" type="Camping_Item__c[]"/> <aura:attribute name="newItem" type="Camping_Item__c" default="{'sobjectType': 'Camping_Item__c', 'Name': '', 'Price__c': 0, 'Quantity__c': 0, 'Packed__c': false }"/> <div style = "slds"> <div class="slds-col slds-col--padded slds-p-top--large"> <div aria-labelledby="newform"> <fieldset class="slds-box slds-theme--default slds-container--small"> <legend id="newform" class="slds-text-heading--small slds-p-vertical--medium">New Form</legend> <form class="slds-form--stacked"> <div class="slds-form-element slds-is-required"> <div class="slds-form-element__control"> <ui:inputText aura:id="formname" label="Name" class="slds-input" labelClass="slds-form-element__label" value="{!v.newItem.Name}" required="true"/> </div> </div> <div class="slds-form-element slds-is-required"> <div class="slds-form-element__control"> <ui:inputCurrency aura:id="formprice" label="Price" class="slds-input" labelClass="slds-form-element__label" value="{!v.newItem.Price__c}" placeholder="0"/> </div> </div> <div class="slds-form-element"> <div class="slds-form-element__control"> <ui:inputNumber aura:id="formquantity" label="Quantity" class="slds-input" labelClass="slds-form-element__label" value="{!v.newItem.Quantity__c}" required="true" placeholder="0"/> </div> </div> <div class="slds-form-element"> <ui:inputCheckbox aura:id="formpacked" label="Packed?" class="slds-checkbox" labelClass="slds-form-element__label" value="{!v.newItem.Packed__c}"/> </div> <div class="slds-form-element"> <ui:button label="Create Form" class="slds-button slds-button--brand" press="{!c.clickCreateFormData}"/> </div> </form> </fieldset> </div> </div> <div class="slds-card slds-p-top--medium"> <header class="slds-card__header"> <h3 class="slds-text-heading--small">Camping</h3> </header> <section class="slds-card__body"> <div id="list" class="row"> <aura:iteration items="{!v.items}" var="items"> <c:campingListItem item="{!items}"/> </aura:iteration> </div> </section> </div> </div> </aura:component>CampingListController.js:
({ clickCreateFormData: function(component, event, helper) { var validitem = true; var nameField = component.find("formname"); var expname = nameField.get("v.value"); if ($A.util.isEmpty(expname)){ validitem = false; nameField.set("v.errors", [{message:"Expense name can't be blank."}]); } else { nameField.set("v.errors",null); } var priceField = component.find("formprice"); var expprice = nameField.get("v.value"); if ($A.util.isEmpty(expprice)){ validitem = false; priceField.set("v.errors", [{message:"Expense price can't be blank."}]); } else{ priceField.set("v.errors",null); } var quantityField = component.find("formquantity"); var expquantity = nameField.get("v.value"); if ($A.util.isEmpty(expquantity)){ validitem = false; quantityField.set("v.errors", [{message:"Expense quantity can't be blank."}]); } else{ quantityField.set("v.errors",null); } /* if(validExpense){ var newItem = component.get("v.newItem"); console.log("Create item: " + JSON.stringify(newItem)); helper.createExpense(component, newItem); } */ if(validitem){ var newItem = component.get("v.newItem"); console.log("Create item: " + JSON.stringify(newItem)); var theItem = component.get("v.items"); var newItem = JSON.parse(JSON.stringify(newItem)); theItem.push(newItem); component.set("v.newItem",newItem); } component.set("v.newItem",{'sobjectType': 'Camping_Item__c', 'Name': '', 'Price__c': 0, 'Quantity__c': 0, 'Packed__c': false }); } })CampingListItem.cmp:
<aura:component implements="force:appHostable"> <aura:attribute name="item" type="Camping_Item__c"/> <p>The Item is: <ui:outputText value="{!v.item}" /> </p> <p>Name: <ui:outputText value="{!v.item.Name}"/> </p> <p>Price: <ui:outputCurrency value="{!v.item.Price__c}"/> </p> <p>Quantity: <ui:outputNumber value="{!v.item.Quantity__c}"/> </p> <p>Packed?: <ui:outputCheckbox value="{!v.item.Packed__c}"/> </p> <!-- <p> <ui:button label="Packed!" press="{!c.packItem}"/> </p> --> </aura:component>
Could anyone help pass and run the challenge.
Thanks.
- Yashita Goyal 17
- June 14, 2016
- Like
- 0
Trailhead challenge:"Connect components with Events"
The campingList JavaScript controller isn't setting the 'item' as a parameter or saving the record correctly.
My code is as follows:
1---Camping List Component
2---Camping List Controller
3---Camping List Helper
Empty
4---Camping List Form
5---CampingListFormController
6---CampingListFormHelper
I am still getting this error:
Any help would be appreciated.
My code is as follows:
1---Camping List Component
<aura:component controller="CampingListController"> <aura:handler name="init" action="{!c.doInit}" value="{!this}"/> <aura:handler name="addItem" event="c:addItemEvent" action="{!c.handleAddItem }"/> <aura:attribute name="newItem" type="Camping_Item__c" default="{ 'sobjectType': 'Camping_Item__c', 'Name': '', 'Quantity__c': 0, 'Price__c': 0, 'Packed__c': false }"/> <aura:attribute name="items" type="Camping_Item__c[]"/> <ol> <li>Bug Spray</li> <li>Bear Repellant</li> <li>Goat Food</li> </ol> <!-- NEW EXPENSE FORM --> <div class="slds-col slds-col--padded slds-p-top--large"> <c:campingListForm/> </div> <!-- / NEW EXPENSE FORM --> <div class="slds-card slds-p-top--medium"> <header class="slds-card__header"> <h3 class="slds-text-heading--small">Items</h3> </header> <section class="slds-card__body"> <div id="list" class="row"> <aura:iteration items="{!v.items}" var="items"> <c:campingListItem item="{!item}"/> </aura:iteration> </div> </section> </div> </aura:component>
2---Camping List Controller
({ // Load items from Salesforce doInit: function(component, event, helper) { // Create the action var action = component.get("c.getItems"); // Add callback behavior for when response is received action.setCallback(this, function(response) { var state = response.getState(); if (component.isValid() && state === "SUCCESS") { component.set("v.items", response.getReturnValue()); } else { console.log("Failed with state: " + state); } }); // Send action off to be executed $A.enqueueAction(action); }, handleAddItem: function(component, event, helper) { var newItem = event.getParam("item"); //helper.createItem(component, newItem); this.saveItem(component, item, function(response){ var state = response.getState(); if (component.isValid() && state === "SUCCESS") { var items = component.get("v.items"); items.push(response.getReturnValue()); component.set("v.items", items); } } } })
3---Camping List Helper
Empty
4---Camping List Form
<aura:component > <aura:registerEvent name="addItem" type="c:addItemEvent"/> <!-- CREATE NEW ITEM FORM --> <form class="slds-form--stacked"> <div class="slds-form-element slds-is-required"> <div class="slds-form-element__control"> <ui:inputText aura:id="itemname" label="Name" class="slds-input" labelClass="slds-form-element__label" value="{!v.newItem.Name}" required="true"/> </div> </div> <div class="slds-form-element slds-is-required"> <div class="slds-form-element__control"> <ui:inputNumber aura:id="quantity" label="Quantity" class="slds-input" labelClass="slds-form-element__label" value="{!v.newItem.Quantity__c}" required="true"/> </div> </div> <div class="slds-form-element"> <div class="slds-form-element__control"> <ui:inputCurrency aura:id="price" label="Price" class="slds-input" labelClass="slds-form-element__label" value="{!v.newItem.Price__c}" /> </div> </div> <div class="slds-form-element"> <ui:inputCheckbox aura:id="packed" label="Packed?" class="slds-checkbox" labelClass="slds-form-element__label" value="{!v.newItem.Packed__c}"/> </div> <div class="slds-form-element"> <ui:button label="Create Camping Item" class="slds-button slds-button--brand" press="{!c.clickCreateItem}"/> </div> </form> <!-- / CREATE NEW ITEM FORM --> </aura:component>
5---CampingListFormController
({ clickCreateItem: function(component, event, helper) { if(helper.validateItemForm(component)){ // Create the new item var newItem = component.get("v.newItem"); helper.createItem(component, newItem); } } })
6---CampingListFormHelper
({ createItem: function(component, newItem) { var createItem = component.getItem("createItem"); createItem.setParams({ "item": item }); createItem.fire(); component.set("v.newItem",{ 'sobjectType': 'Camping_Item__c', 'Name': '', 'Quantity__c': 0, 'Price__c': 0, 'Packed__c': false }/>); }, validateItemForm: function(component) { // Simplistic error checking var validItem = true; // Name must not be blank var nameField = component.find("itemname"); var itemname = nameField.get("v.value"); if ($A.util.isEmpty(itemname)){ validItem = false; nameField.set("v.errors", [{message:"Item name can't be blank."}]); } else { nameField.set("v.errors", null); } // Quantity must not be blank var quantityField = component.find("quantity"); var quantity = nameField.get("v.value"); if ($A.util.isEmpty(quantity)){ validItem = false; quantityField.set("v.errors", [{message:"Quantity can't be blank."}]); } else { quantityField.set("v.errors", null); } // Price must not be blank var priceField = component.find("price"); var price = priceField.get("v.value"); if ($A.util.isEmpty(price)){ validItem = false; priceField.set("v.errors", [{message:"Price can't be blank."}]); } else { quantityField.set("v.errors", null); } return validItem; } })
I am still getting this error:
Any help would be appreciated.
- Shobhit Saxena
- June 10, 2016
- Like
- 2
Lightning Components Basics: "Input Data using Forms challenge"-How to reset an aura attribute?
I am stuck at this point:
I just want to know what is going to be the syntax for resetting the newItem value provider with a Camping_Item__c sObject??
My Code is as follows:
(1) campingList Component:
(2) Controller code:
I just want to know what is going to be the syntax for resetting the newItem value provider with a Camping_Item__c sObject??
My Code is as follows:
(1) campingList Component:
<aura:component > <aura:attribute name="newItem" type="Camping_Item__c" default="{ 'sobjectType': 'Camping_Item__c', 'Name': '', 'Quantity__c': 0, 'Price__c': 0, 'Packed__c': false }"/> <aura:attribute name="items" type="Camping_Item__c[]"/> <ol> <li>Bug Spray</li> <li>Bear Repellant</li> <li>Goat Food</li> </ol> <!-- CREATE NEW ITEM FORM --> <form class="slds-form--stacked"> <div class="slds-form-element slds-is-required"> <div class="slds-form-element__control"> <ui:inputText aura:id="itemname" label="Name" class="slds-input" labelClass="slds-form-element__label" value="{!v.newItem.Name}" required="true"/> </div> </div> <div class="slds-form-element slds-is-required"> <div class="slds-form-element__control"> <ui:inputNumber aura:id="quantity" label="Quantity" class="slds-input" labelClass="slds-form-element__label" value="{!v.newItem.Quantity__c}" required="true"/> </div> </div> <div class="slds-form-element"> <div class="slds-form-element__control"> <ui:inputCurrency aura:id="price" label="Price" class="slds-input" labelClass="slds-form-element__label" value="{!v.newItem.Price__c}" /> </div> </div> <div class="slds-form-element"> <ui:inputCheckbox aura:id="packed" label="Packed?" class="slds-checkbox" labelClass="slds-form-element__label" value="{!v.newItem.Packed__c}"/> </div> <div class="slds-form-element"> <ui:button label="Create Camping Item" class="slds-button slds-button--brand" press="{!c.clickCreateItem}"/> </div> </form> <!-- / CREATE NEW ITEM FORM --> <div class="slds-card slds-p-top--medium"> <header class="slds-card__header"> <h3 class="slds-text-heading--small">Items</h3> </header> <section class="slds-card__body"> <div id="list" class="row"> <aura:iteration items="{!v.items}" var="items"> <c:campingListItem item="{!item}"/> </aura:iteration> </div> </section> </div> </aura:component>
(2) Controller code:
({ clickCreateItem: function(component, event, helper) { // Simplistic error checking var validItem = true; // Name must not be blank var nameField = component.find("itemname"); var itemname = nameField.get("v.value"); if ($A.util.isEmpty(itemname)){ validItem = false; nameField.set("v.errors", [{message:"Item name can't be blank."}]); } else { nameField.set("v.errors", null); } // Quantity must not be blank var quantityField = component.find("quantity"); var quantity = nameField.get("v.value"); if ($A.util.isEmpty(quantity)){ validItem = false; quantityField.set("v.errors", [{message:"Quantity can't be blank."}]); } else { quantityField.set("v.errors", null); } var priceField = component.find("price"); var price = priceField.get("v.value"); if ($A.util.isEmpty(price)){ validItem = false; priceField.set("v.errors", [{message:"Price can't be blank."}]); } else { quantityField.set("v.errors", null); } if(validItem){ var newItem = component.get("v.newItem"); console.log("Create item: " + JSON.stringify(newItem)); //helper.createItem(component, newItem); // var theItems = component.get("v.items"); // Copy the expense to a new object // THIS IS A DISGUSTING, TEMPORARY HACK var newItem = JSON.parse(JSON.stringify(item)); console.log("Items before 'create': " + JSON.stringify(theItems)); theExpenses.push(newItem); component.set("v.expenses", theItems); console.log("Items after 'create': " + JSON.stringify(theItems)); theItems.push(newItem); component.set("v.items", theItems); } } })
- Shobhit Saxena
- June 10, 2016
- Like
- 0
Stuck in trailhead - Lightning Components Basics
Challenge - Create a form to enter new items and display the list of items entered. To make our camping list look more appealing, change the campingHeader component to use the SLDS. Similar to the unit, style the Camping List H1 inside the slds-page-header. Modify the campingList component to contain an input form and an iteration of campingListItem components for displaying the items entered.
The component requires an attribute named items with the type of an array of camping item custom objects.
The component requires an attribute named newItem of type Camping_Item__c with default quantity and price values of 0.
The component displays the Name, Quantity, Price, and Packed form fields with the appropriate input component types and values from the newItem attribute.
The JavaScript controller checks to ensure that the Name, Quantity and Price values submitted are not null.
If the form is valid, the JavaScript controller pushes the newItem onto the array of existing items, triggers the notification that the items value provider has changed, and resets the newItem value provider with a blank sObjectType of Camping_Item__c.
My answer -
<aura:component >
<aura:attribute name="items" type="Camping_Item__c[]"/>
<aura:attribute name="newitem" type="Camping_Item__c[]" default="{ 'sobjectType': 'Camping_Item__c',
'Quantity__c'=0, 'Price__c'=0}"/>
<p>Name:
<ui:inputText value="{!v.newitem.name}"/>
</p>
<p>Packed:
<ui:inputCheckbox value="{!v.newitem.Packed__c}"/>
</p>
<p>Price:
<ui:inputCurrency value="{!v.newitem.Price__c}"/>
</p>
<p>Quantity:
<ui:inputNumber value="{!v.newitem.Quantity__c}"/>
</p>
</aura:component>
Error -
Challenge Not yet complete... here's what's wrong:
The campingList component isn't iterating the array of 'items' and creating 'campingListItem' components.
Please share the correct solution.
The component requires an attribute named items with the type of an array of camping item custom objects.
The component requires an attribute named newItem of type Camping_Item__c with default quantity and price values of 0.
The component displays the Name, Quantity, Price, and Packed form fields with the appropriate input component types and values from the newItem attribute.
The JavaScript controller checks to ensure that the Name, Quantity and Price values submitted are not null.
If the form is valid, the JavaScript controller pushes the newItem onto the array of existing items, triggers the notification that the items value provider has changed, and resets the newItem value provider with a blank sObjectType of Camping_Item__c.
My answer -
<aura:component >
<aura:attribute name="items" type="Camping_Item__c[]"/>
<aura:attribute name="newitem" type="Camping_Item__c[]" default="{ 'sobjectType': 'Camping_Item__c',
'Quantity__c'=0, 'Price__c'=0}"/>
<p>Name:
<ui:inputText value="{!v.newitem.name}"/>
</p>
<p>Packed:
<ui:inputCheckbox value="{!v.newitem.Packed__c}"/>
</p>
<p>Price:
<ui:inputCurrency value="{!v.newitem.Price__c}"/>
</p>
<p>Quantity:
<ui:inputNumber value="{!v.newitem.Quantity__c}"/>
</p>
</aura:component>
Error -
Challenge Not yet complete... here's what's wrong:
The campingList component isn't iterating the array of 'items' and creating 'campingListItem' components.
Please share the correct solution.
- Mansi Gupta 13
- June 09, 2016
- Like
- 0