为顶点中的 child object 获取 parent object 的 ID
Get id of parent object for the child object in apex
我有两个 object(战舰和资源)。两者都是自定义的 object。现在我想通过 VF 页面添加一个新的资源。 resource__c 是 Warships__c 的 child(查找关系)。问题是我想插入一条新的 resource__c 记录,但我找不到 warship__c object 的 ID,就像(联系人 Object 中的 AccountId)
Resource__c con = new Resource__c(Name=resName, Quantity__c=Quantity, Utilization__c=Utilize,Warship__c.id=id);
// Warship__c.id or Warship__r.id etc??
insert con;
详情请查看代码
public class WarshipManagerController {
public String resName{get;set;}
public Integer Quantity{get;set;}
public Integer Utilize{get;set;}
//public List<Resource__c>resList {get;set;}
public List<Warship__c>resList {get;set;}
public List<Resource__c>newResList {get;set;}
public string id;
ApexPages.StandardController sc;
public WarshipManagerController(ApexPages.StandardController sc){
newResList =new List<Resource__c>();
this.sc = sc;
string id=ApexPages.CurrentPage().getparameters().get('id');
resList= new List <Warship__c>();
for(Warship__c Ws:[SELECT Id ,(SELECT Id,Name, Utilization__c, Quantity__c FROM Resources__r)
FROM Warship__c where Id = :id] ){
for( Resource__c Rs:Ws.Resources__r){
newResList.add(Rs);
}
system.debug('---->'+newResList);
}
}
public pageReference Save(){
Resource__c con = new Resource__c(Name=resName, Quantity__c=Quantity, Utilization__c=Utilize,Resources.Warship__r=id);
insert con;
return null;
}
}
VF 页面
<apex:page standardController="Warship__c" extensions="WarshipManagerController">
<apex:form >
<apex:pageBlock title="Resource">
<apex:pageBlockSection >
First Name <apex:inputText value="{!resName}" />
Last Name <apex:inputText value="{!Quantity}" />
Phone <apex:inputText value="{!Utilize}" />
<apex:commandButton value="save" action="{!save}" />
</apex:pageBlockSection>
<apex:dataTable value="{!newResList}" var="re" width="100%">
<apex:column >
<apex:facet name="header"><b>Resource</b></apex:facet>
<apex:outputField value="{!re.Name}" />
</apex:column>
<apex:column >
<apex:facet name="header"><b>Quantity</b></apex:facet>
<apex:outputField value="{!re.Quantity__c}" />
</apex:column>
<apex:column >
<apex:facet name="header"><b>utilization</b></apex:facet>
<apex:outputField value="{!re.Utilization__c}" />
</apex:column>
</apex:dataTable>
</apex:pageBlock>
</apex:form>
</apex:page>
那么我怎样才能将许多 recource__c 条记录插入到 Warship__C object 就像联系客户
您是否接受过普通关系数据库方面的培训?在 Resource__c table 中,Warship__c 列是 Id 列。它持有对另一个 table 的引用(外键)。如果您键入 Warship__c
,您的意思是使用 ID。如果您键入 Warship__r.Name
,您会跳过关系到下一个 table。您在数据库中进行 JOIN 并且 Warship__r 成为 table 别名。
因此,如果您的 string id
拥有战舰 ID(顺便说一下,这是一个糟糕的想法,永远不要调用与类型名称相同的变量。Id
是一种类型,您可以搞砸您的代码很好。想想Integer Account = 5; // happy debugging suckers
)
那么你应该可以做到 new Resource__c(Name=resName, Quantity__c=Quantity, Utilization__c=Utilize,Warship__c=id);
大多数时候您将只使用 Id 字段这样简单的引用。有时您会在 insert/update 期间使用 Warship__r 但这实际上是更新插入操作和高级主题。
我有两个 object(战舰和资源)。两者都是自定义的 object。现在我想通过 VF 页面添加一个新的资源。 resource__c 是 Warships__c 的 child(查找关系)。问题是我想插入一条新的 resource__c 记录,但我找不到 warship__c object 的 ID,就像(联系人 Object 中的 AccountId)
Resource__c con = new Resource__c(Name=resName, Quantity__c=Quantity, Utilization__c=Utilize,Warship__c.id=id);
// Warship__c.id or Warship__r.id etc??
insert con;
详情请查看代码
public class WarshipManagerController {
public String resName{get;set;}
public Integer Quantity{get;set;}
public Integer Utilize{get;set;}
//public List<Resource__c>resList {get;set;}
public List<Warship__c>resList {get;set;}
public List<Resource__c>newResList {get;set;}
public string id;
ApexPages.StandardController sc;
public WarshipManagerController(ApexPages.StandardController sc){
newResList =new List<Resource__c>();
this.sc = sc;
string id=ApexPages.CurrentPage().getparameters().get('id');
resList= new List <Warship__c>();
for(Warship__c Ws:[SELECT Id ,(SELECT Id,Name, Utilization__c, Quantity__c FROM Resources__r)
FROM Warship__c where Id = :id] ){
for( Resource__c Rs:Ws.Resources__r){
newResList.add(Rs);
}
system.debug('---->'+newResList);
}
}
public pageReference Save(){
Resource__c con = new Resource__c(Name=resName, Quantity__c=Quantity, Utilization__c=Utilize,Resources.Warship__r=id);
insert con;
return null;
}
}
VF 页面
<apex:page standardController="Warship__c" extensions="WarshipManagerController">
<apex:form >
<apex:pageBlock title="Resource">
<apex:pageBlockSection >
First Name <apex:inputText value="{!resName}" />
Last Name <apex:inputText value="{!Quantity}" />
Phone <apex:inputText value="{!Utilize}" />
<apex:commandButton value="save" action="{!save}" />
</apex:pageBlockSection>
<apex:dataTable value="{!newResList}" var="re" width="100%">
<apex:column >
<apex:facet name="header"><b>Resource</b></apex:facet>
<apex:outputField value="{!re.Name}" />
</apex:column>
<apex:column >
<apex:facet name="header"><b>Quantity</b></apex:facet>
<apex:outputField value="{!re.Quantity__c}" />
</apex:column>
<apex:column >
<apex:facet name="header"><b>utilization</b></apex:facet>
<apex:outputField value="{!re.Utilization__c}" />
</apex:column>
</apex:dataTable>
</apex:pageBlock>
</apex:form>
</apex:page>
那么我怎样才能将许多 recource__c 条记录插入到 Warship__C object 就像联系客户
您是否接受过普通关系数据库方面的培训?在 Resource__c table 中,Warship__c 列是 Id 列。它持有对另一个 table 的引用(外键)。如果您键入 Warship__c
,您的意思是使用 ID。如果您键入 Warship__r.Name
,您会跳过关系到下一个 table。您在数据库中进行 JOIN 并且 Warship__r 成为 table 别名。
因此,如果您的 string id
拥有战舰 ID(顺便说一下,这是一个糟糕的想法,永远不要调用与类型名称相同的变量。Id
是一种类型,您可以搞砸您的代码很好。想想Integer Account = 5; // happy debugging suckers
)
那么你应该可以做到 new Resource__c(Name=resName, Quantity__c=Quantity, Utilization__c=Utilize,Warship__c=id);
大多数时候您将只使用 Id 字段这样简单的引用。有时您会在 insert/update 期间使用 Warship__r 但这实际上是更新插入操作和高级主题。