首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visualforce:如何从单个表创建多个sObjects

Visualforce:如何从单个表创建多个sObjects
EN

Stack Overflow用户
提问于 2012-04-02 22:54:34
回答 1查看 1.6K关注 0票数 0

我有两个自定义对象:'Package‘和'Order’。‘'Order’包括'Package‘字段和其他一些字段。我需要在一个表中为几个'Order‘实例指定不同的字段值。“‘Order”对象在表中呈现时不存储在数据库中(ID = null),它与“Package”对象的关系是只读的。问题是如何将所有输入的数据绑定到适当的“顺序”对象?

我有下面的visualforce源码。也许我应该添加一些隐藏字段来指定订单和特殊包之间的关系,但我不理解如何正确做到这一点。

代码语言:javascript
复制
<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}"/>

另请参阅我的控制器的片段:

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-03 01:00:08

在处理多种类型的SObject时,我不会使用StandardSetController。我会考虑在我自己的combines both类中管理Apex。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9978652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档