創建多個sObjects我有2個自定義對象:「包裝」和「秩序」。 'Order'包含'Package'字段和其他一些字段。我需要爲一個表中的幾個'Order'實例指定不同的字段值。 'Order'對象在表中呈現時(ID = null)未存儲在數據庫中,並且其與'Package'對象的關係是隻讀的。問題是如何將所有輸入的數據綁定到適當的'Order'對象?Visualforce:如何從單個表
我有以下visualforce源。可能是我應該添加一些隱藏的字段來指定Order和Paticular Package之間的關係,但我不知道如何正確執行它。
<apex:pageBlockTable value="{!products}" var="product">
<apex:column headerValue="Product Type">
<apex:outputLink value="/{!product.Package__r.ID}">{!product.Package__r.name}</apex:outputLink>
</apex:column>
<apex:column value="{!product.package__r.X12NC__c}"/>
<apex:column value="{!product.package__r.Product_Description__c}"/>
<apex:column value="{!product.package__r.Stock__c}"/>
<apex:column value="{!product.package__r.Expected__c}"/>
<apex:column value="{!product.package__r.Product_Status__c}"/>
<apex:column value="{!product.package__r.Max_Qty__c}"/>
<apex:column headerValue="Quantity">
<apex:inputField value="{!product.amount__c}"/>
</apex:column>
</apex:pageBlockTable>
<apex:commandButton value="Make order" action="{!makeOrder}"/>
也看到我的控制器的片段:
public class OrdersController {
public String X12NC { get; set; }
public String productType { get; set; }
public List<max__Order__c> orders = new List<max__Order__c>();
public Set<max__Order__c> ordered{ get; set; }
public Integer orderedNumber { get { return ordered.size(); } }
public OrdersController() {
System.debug(Logginglevel.INFO, 'Start constructor');
this.X12NC = ApexPages.currentPage().getParameters().get('x12nc');
this.productType = ApexPages.currentPage().getParameters().get('productType');
this.ordered = new Set<max__Order__c>();
System.debug(Logginglevel.INFO, 'productType = ' + this.productType);
System.debug(Logginglevel.INFO, 'x12nc = ' + this.X12NC);
}
public ApexPages.StandardSetController conn {
get {
if (conn == null) {
System.debug(Logginglevel.INFO, 'Creating new connection!');
String pType = this.productType == null ? '%': '%' + this.productType + '%';
String x12nc = this.x12nc == null ? '%': '%' + this.x12nc + '%';
System.debug(Logginglevel.INFO, 'pType = ' + pType);
System.debug(Logginglevel.INFO, 'x12nc = ' + x12nc);
conn = new ApexPages.StandardSetController(Database.getQueryLocator([
select name, max__X12NC__c, max__Product_Description__c, max__Expected__c, max__Stock__c, max__Product_Status__c, max__Max_Qty__c from max__Package__c
where max__X12NC__c like :x12nc
and name like :pType
limit 2000
]));
conn.setPageSize(20);
}
return conn;
}
set;
}
// Initialize setCon and return a list of records
public List<max__Order__c> getProducts() {
System.debug(Logginglevel.INFO, 'getProducts() call');
orders.clear();
for (max__Package__c pckg: (List<max__Package__c>) conn.getRecords()) {
max__Order__c order = new max__Order__c(max__Package__r = pckg);
orders.add(order);
}
return orders;
}
public PageReference search() {
System.debug(Logginglevel.INFO, 'Call search method!');
this.ordered.clear();
this.conn = null;
return null;
}
public PageReference makeOrder() {
System.debug(Logginglevel.INFO, 'Make order');
for (max__Order__c order: orders) {
System.debug(Logginglevel.INFO, 'Inspecting order = ' + order);
if (order.amount__c != null && order.amount__c > 0) {
System.debug(Logginglevel.INFO, 'Add ' + order + ' to shopping cart');
System.debug(Logginglevel.INFO, 'Order package = ' + order.package__c);
ordered.add(order);
}
}
System.debug('The number of objects added in shopping cart: ' + ordered.size());
return null;
}
爲了澄清,是不是正確的說一個訂單隻能有一個包?您是否每頁顯示多個訂單? – 2012-04-02 15:55:14
1.是的,一個訂單包含單一類型的包。 2.是的,我想在單個頁面上的單個表格中顯示所有訂單。 – Maxim 2012-04-03 07:48:13