• Thomas Shelby 26
  • NEWBIE
  • 0 Points
  • Member since 2023

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 0
    Questions
  • 8
    Replies
HI,
I'm getting this error like
System.QueryException: only aggregate expressions use field aliasing


public static list<Property__c> getFilteredProperty(string Location,string BedRoom,string BathRoom,string MaxBudget)
  {
  list<Property__c> allPropertyLists = new list<Property__c>();
  string PropertyQuery = 'SELECT Id,Additional_Rooms__c,Available_From__c,Carpet_area_sqft__c,Covered_Area_sqft__c ';
     PropertyQuery = PropertyQuery+ 'Electricity_Status__c,Facing__c,Floor__c,For_Bachelor__c,For_Family__c,Furnishing_Available__c,Furnish_Type__c,Geo_Map__c,Landmark__c,Location__c,Area__c,Status__c,State__c,country__c,Maintainance_Charge__c,No_of_Balcony__c,No_of_Bathroom__c,No_of_Bedroom__c,Property_Description__c,Property_Main_Image__c,Property_Owner__c,Property_Video_URL__c,Name,Rent__c,Security_Deposit__c,Verified__c,Water_Availability__c ';
     PropertyQuery = PropertyQuery+' FROM Property__c ';
  string WhereClause= 'WHERE Rent__c != NULL';
      system.debug('*****Location'+Location);
      if(string.isNotBlank(Location))
      {
          if(Location !='ALL')
          {
              WhereClause=WhereClause+ ' AND Area__c =:Location ';
          }
      }
      system.debug('*****BedRoom'+BedRoom);
      integer BedRoomCount;
      if(string.isNotBlank(BedRoom))
      {
          if(BedRoom !='ALL')
          {
              BedRoomCount=integer.valueOf(BedRoom);
              WhereClause=WhereClause+ ' AND No_of_Bedroom__c=:BedRoom ' ;
          }
      }
       system.debug('*****BathRoom'+BathRoom);
      integer BathRoomCount;
      if(string.isNotBlank(BathRoom))
      {
          if(BathRoom !='ALL')
          {
              BathRoomCount=integer.valueOf(BathRoom);
              WhereClause=WhereClause+ ' AND No_of_Bathroom__c=:BathRoom ' ;
          }
      }
      system.debug('*****MaxBudget'+MaxBudget);
      double MaxBudgetValue;
      if(string.isNotBlank(MaxBudget))
      {
              MaxBudgetValue=double.valueOf(MaxBudget);
              WhereClause=WhereClause+ ' AND Rent__c <=:MaxBudget ' ;
      }
      PropertyQuery=PropertyQuery+' '+WhereClause;
      system.debug('PropertyQuery' +PropertyQuery);
      allPropertyLists = Database.query(PropertyQuery);
       system.debug('PropertyQuery' +allPropertyLists);     
      return allPropertyLists;
   }public static list<Property__c> getFilteredProperty(string Location,string BedRoom,string BathRoom,string MaxBudget)
  {
  list<Property__c> allPropertyLists = new list<Property__c>();
  string PropertyQuery = 'SELECT Id,Additional_Rooms__c,Available_From__c,Carpet_area_sqft__c,Covered_Area_sqft__c ';
     PropertyQuery = PropertyQuery+ 'Electricity_Status__c,Facing__c,Floor__c,For_Bachelor__c,For_Family__c,Furnishing_Available__c,Furnish_Type__c,Geo_Map__c,Landmark__c,Location__c,Area__c,Status__c,State__c,country__c,Maintainance_Charge__c,No_of_Balcony__c,No_of_Bathroom__c,No_of_Bedroom__c,Property_Description__c,Property_Main_Image__c,Property_Owner__c,Property_Video_URL__c,Name,Rent__c,Security_Deposit__c,Verified__c,Water_Availability__c ';
     PropertyQuery = PropertyQuery+' FROM Property__c ';
  string WhereClause= 'WHERE Rent__c != NULL';
      system.debug('*****Location'+Location);
      if(string.isNotBlank(Location))
      {
          if(Location !='ALL')
          {
              WhereClause=WhereClause+ ' AND Area__c =:Location ';
          }
      }
      system.debug('*****BedRoom'+BedRoom);
      integer BedRoomCount;
      if(string.isNotBlank(BedRoom))
      {
          if(BedRoom !='ALL')
          {
              BedRoomCount=integer.valueOf(BedRoom);
              WhereClause=WhereClause+ ' AND No_of_Bedroom__c=:BedRoom ' ;
          }
      }
       system.debug('*****BathRoom'+BathRoom);
      integer BathRoomCount;
      if(string.isNotBlank(BathRoom))
      {
          if(BathRoom !='ALL')
          {
              BathRoomCount=integer.valueOf(BathRoom);
              WhereClause=WhereClause+ ' AND No_of_Bathroom__c=:BathRoom ' ;
          }
      }
      system.debug('*****MaxBudget'+MaxBudget);
      double MaxBudgetValue;
      if(string.isNotBlank(MaxBudget))
      {
              MaxBudgetValue=double.valueOf(MaxBudget);
              WhereClause=WhereClause+ ' AND Rent__c <=:MaxBudget ' ;
      }
      PropertyQuery=PropertyQuery+' '+WhereClause;
      system.debug('PropertyQuery' +PropertyQuery);
      allPropertyLists = Database.query(PropertyQuery);
       system.debug('PropertyQuery' +allPropertyLists);     
      return allPropertyLists;
   }
This is on challenge 3.  The Register Node Name is "Create Seed Bank Agencies", the alias is "create_seed_bank_agencies", the Name is "Seed Bank Agencies".  I read the Pre-work and understand the alias should be with underscores and lower case.  I have tried a few combinations but I get this error:

Challenge Not yet complete... here's what's wrong: 
Couldn’t find 'Create Seed Bank Agencies' node. Please check the name and alias spelling.
Hi,
We have a requirement to count the number of active entitlements under an account.
An entitlement is considered as acitve if "Status = Active AND  EndDate >= Today() and Support level (Text formula field) = 'GOLD or SILVER or PLATINUM' "

we have tried with the below ...
1: Created a rollup summary field on 'Account' to count the active entitlements which meet above criteria , but the problem here is we cannot filter the entitlements using the field status and support level since formula using product object

2:  > Created a custom checkbox field 'isActiveEntitlement' on entitlement object so that we can create a rollup summary field on account to count entitlements with isActiveEntitlement = true
> Created a trigger to set if entitlement is active or not. below is Sample code of trigger

if(Status = Active && EndDate >= Today() AND (Support level = GOLD / SILVER / PLATINUM))
{
      isActiveEntitlement = True;
}
else
{
     isActiveEntitlement = False;
}
Update Entitlement records;

The problem here is if I edit and change the endDate of entitlement manually, the status becomes expired and the trigger is firing and everything is working good but if the date is expired automatically then state is setting to expired but trigger is not firing, isActiveEntitlement is not setting to false hence count is not getting updated on account

3: Created a process builder with same logic as above trigger , this also works good if the entitlement is edited manually and not for automated / backend process.
Please help me to fix the issue or suggest any other ways to count active entitlements.

Thanks,
Anupama




 
I am not able to cover the below lines in test class. please help.
Contact con = new contact();
          con.id= rel.From_Individual__c;
          con.firstname= rel.From_Individual__r.firstname;
          con.lastname= rel.From_Individual__r.lastname;
          con.email= rel.From_Individual__r.email;
          conListForAdvisor.add(con);
        }
        if(conListForAdvisor.size()>0){
          update relationListForAdvisor;
          update conListForAdvisor;
        }
        for(Event ev : newEvents){
            System.debug(ev);
          if(ev.eventName != null && ev.eventName != ''){
            cEvent = new Event__c();

            String parishRegion = getCRSRegion(University);
            cEvent.Name = ev.eventName;
            cEvent.Status__c = 'Completed';
            cEvent.Description__c = ev.eventDescription;
            if(ev.eventCheckAllThatApply != null) {
              cEvent.Check_all_that_apply_to_your_campus__c = 
              String.valueOf(ev.eventCheckAllThatApply).remove('(').remove(')').replace(',',';');
            }
            if(ev.eventNuberAttended != null && ev.eventNuberAttended != ''){
              cEvent.Number_Attended__c = Decimal.ValueOf(ev.eventNuberAttended);
            }
            if(ev.eventLetters != null && ev.eventLetters != ''){
              cEvent.If_you_hand_wrote_letters_please_list__c = Decimal.ValueOf(ev.eventLetters);
              /*if(Decimal.ValueOf(ev.eventLetters) > 0 ){
                cEvent.Action__c = 'EN - Directing a LETTER WRITING campaign';
              }*/
            }
            
            String evSelectedOptions = '';
            for(String s: ev.eventCheckAllThatApply) {
              evSelectedOptions += s + ' ';
            }
            //evSelectedOptions.addAll(ev.eventCheckAllThatApply);
            System.debug('>>>evSelectedOptions: ' + evSelectedOptions);

            if(evSelectedOptions.contains('Chapter meetings')) {
              cEvent.Action__c = 'ED - Coordinating a MEETING';
            }
            else if(evSelectedOptions.contains('Legislative Visit')) {
              cEvent.Action__c = 'EN - Facilitating a CONGRESSIONAL VISIT';
            }
            else {
              cEvent.Action__c = 'ED - Providing general OUTREACH';
            } 
            
            cEvent.Category__c = catagory;
            String campaignName = ''; // hold the program initiative to attach the event to
            cEvent.Parish_or_School__c = University;
            cEvent.Primary_Institution__c = University;
            

            cEvent.CRS_Region__c = 'Replicator; ' + parishRegion;
            if(ev.eventDate != null && ev.eventDate !=''){
              cEvent.Start_Date__c = date.ValueOf(ev.eventDate);
              cEvent.End_Date__c = date.ValueOf(ev.eventDate);
              cEvent.Event_Date_Time__c = cEvent.End_Date__c;
            }
            cEvent.Association_if_other__c = ''; // reset after the field has been used.            
            lstEvents.add(cEvent);
          }

        }
        if(lstEvents.size() > 0){

          insert lstEvents;
          for(Event__c events : lstEvents){
            eventIds.add(events.Id);
          }
          eventId = lstEvents[0].Id;
        }
As of a couple of days ago we started getting this error and not sure where to go to get it fixed. Hope someone can help
 


Description:   A trigger that will generate the Property records when Lead is converted
Test Class:    TestTriggerGenerateNewProperty


trigger TriggerGenerateNewProperty on Lead (after update) {
    Map<String,Account> AccountMap= new map<String,Account>([Select name,Id, OwnerId from account]);    
    System.debug('@AccountMap'+AccountMap);   
    Property_Contacts__c propertyContact = new Property_Contacts__c();
    Property_Contacts__c propertyContactToUpdate = new Property_Contacts__c();
    List<Property_Contacts__c> propertyContactList = new List<Property_Contacts__c>();
    List<Property_Contacts__c> propertyContactListToUpdate = new List<Property_Contacts__c>();
    List<Property_Contacts__c> propertyContactListExistToUpdate = new List<Property_Contacts__c>();
    List<Property__c> PropertyList = new List<Property__c>();   
    Set<Id> leadId =new Set<Id>();
    Set<String> OppId = new Set<String>();
    Set<String> PropertyId = new Set<String>();
    Set<String> AccountId = new Set<String>();
    Map<Integer,Id> AccountExistmap = new Map<Integer,Id>();  
    List<String> LeadName = new List<String>();
    List<String> unitNumber = new List<String>();
    List<String> streetNumer = new List<String>();
    List<String> streetName = new List<String>();
    List<String> suburb = new List<String>(); 
    
    for(Lead lead: trigger.new){ 
    
        if(Lead.IsConverted){
            Integer i=0;
            Property__c property=new Property__c();
            if(lead.Property_Unit_Number__c!=null){
                property.Unit_Number__c = lead.Property_Unit_Number__c;
            }
            if(lead.Property_Street_Number__c!=null){
                property.Street_Number__c = lead.Property_Street_Number__c;
            }
            if(lead.Property_Street_Name__c!=null){
                property.Street_Name__c = lead.Property_Street_Name__c;
            }
            if(lead.Property_Suburb__c!=null){
                property.Suburb__c = lead.Property_Suburb__c;
            }
            if(lead.Property_Postcode__c!=null){
                property.Postcode__c = lead.Property_Postcode__c;   
            }   
            system.debug('@ AccountMap.get(lead.ConvertedAccountId).OwnerId'+ AccountMap.get(lead.ConvertedAccountId).OwnerId);     
            if(AccountMap.get(lead.ConvertedAccountId).OwnerId!=null){
                property.OwnerId = AccountMap.get(lead.ConvertedAccountId).OwnerId;
            }   
            
            if(lead.Property_Street_Type__c!=null){
                property.Street_Type__c = lead.Property_Street_Type__c;
            }   
            if(lead.Property_State__c!=null){
                property.State__c = lead.Property_State__c;
            }
            
            if(lead.Current_Agent__c!=null){
                property.Current_Agent__c = lead.Current_Agent__c;
            }
            if(lead.Rental_Amount__c!=null){
                property.Rental_Amount__c = lead.Rental_Amount__c;
            }
            
            if(lead.Property_Type__c!=null){
                property.Property_Type__c = lead.Property_Type__c;
            }   
            
            if(lead.Date_Last_Advertised__c!=null || lead.Date_Last_Advertised__c!=''){
                property.Date_Last_Advertised__c = lead.Date_Last_Advertised__c;
            }
            //REXP-35
            if(lead.Description != null || lead.Description != ''){
              property.Description__c = lead.Description;
            }
            if(lead.How_did_you_hear_about_Rental_Express__c != null || lead.How_did_you_hear_about_Rental_Express__c != ''){
              property.How_did_you_hear_about_Rental_Express__c = lead.How_did_you_hear_about_Rental_Express__c;
            }
            if(lead.I_would_like_to_rent_the_property__c != null || lead.I_would_like_to_rent_the_property__c != ''){
              property.I_would_like_to_rent_the_property__c = lead.I_would_like_to_rent_the_property__c;
            }
            if(lead.Property_Condition__c != null || lead.Property_Condition__c != ''){
              property.Property_Condition__c = lead.Property_Condition__c;
            }
            if(lead.Property_Furnishings__c != null || lead.Property_Furnishings__c != ''){
              property.Property_Furnishings__c = lead.Property_Furnishings__c;
            }
            if(lead.Pool__c != null || lead.Pool__c != ''){
              property.Pool__c = lead.Pool__c;
            }
            if(lead.Air_Conditioned__c != null || lead.Air_Conditioned__c != ''){
              property.Air_Conditioned__c = lead.Air_Conditioned__c;
            }
            if(lead.Car_Accomodation__c != null || lead.Car_Accomodation__c != ''){
              property.Car_Accomodation__c = lead.Car_Accomodation__c;
            }
            if(lead.Outdoor_Living_Areas__c != null || lead.Outdoor_Living_Areas__c != ''){
              property.Outdoor_Living_Areas__c = lead.Outdoor_Living_Areas__c;
            }
            if(lead.Living_Areas__c != null || lead.Living_Areas__c != ''){
              property.Living_Areas__c = lead.Living_Areas__c;
            }
            if(lead.Number_of_Bathrooms__c != null || lead.Number_of_Bathrooms__c != ''){
              property.Number_of_Bathrooms__c = lead.Number_of_Bathrooms__c;
            }
            if(lead.Number_of_Bedrooms__c != null || lead.Number_of_Bedrooms__c != ''){
              property.Number_of_Bedrooms__c = lead.Number_of_Bedrooms__c;
            }
            if(lead.Construction_Type__c != null || lead.Construction_Type__c != ''){
              property.Construction_Type__c = lead.Construction_Type__c;
            }
            if(lead.Age_of_Property__c != null || lead.Age_of_Property__c != ''){
              property.Age_of_Property__c = lead.Age_of_Property__c;
            }
            if(lead.Property_Status__c != null || lead.Property_Status__c != ''){
              property.Property_Status__c = lead.Property_Status__c;
            }
            AccountExistmap.put(i,lead.ConvertedAccountId); 
            
            OppId.add(lead.ConvertedOpportunityId);     
            leadId.add(lead.id);
            LeadName.add(lead.name);
            unitNumber.add(lead.Property_Unit_Number__c);   
            streetNumer.add(lead.Property_Street_Number__c);
            streetName.add(lead.Property_Street_Name__c);
            suburb.add(lead.Property_Suburb__c);
            if(lead.Property_Street_Number__c!=null && lead.Property_Street_Name__c!=null && lead.Property_Suburb__c!=null && lead.Property_Postcode__c!=null && lead.Property_State__c!=null){            
                PropertyList.add(property);
            }     
            
            propertyContact.Contact__c = lead.ConvertedAccountId;
            propertyContactList.add(propertyContact);
            
        }   
    }
    
    
    
    List<Property__c> propsExist = new List<Property__c>();
                    
    for(Property__c prop: [Select Id,Unit_Number__c, Street_Number__c, Street_Name__c, Suburb__c from Property__c where Unit_Number__c in:unitNumber and  // Check if Property exist
                        Street_Number__c in:streetNumer and Street_Name__c in:streetName and Suburb__c in:suburb]){
                        
        Integer loopCounter = 0;                    
        prop.Unit_Number__c=unitNumber[loopCounter];    
        prop.Street_Number__c=streetNumer[loopCounter];
        prop.Street_Name__c=streetName[loopCounter];
        prop.Suburb__c = suburb[loopCounter];   
        prop.Postcode__c = PropertyList[loopCounter].Postcode__c;
        prop.Street_Type__c = PropertyList[loopCounter].Street_Type__c;
        prop.State__c = PropertyList[loopCounter].State__c;
        prop.Current_Agent__c = PropertyList[loopCounter].Current_Agent__c;
        prop.Rental_Amount__c = PropertyList[loopCounter].Rental_Amount__c;
        prop.Property_Type__c = PropertyList[loopCounter].Property_Type__c;
        prop.Date_Last_Advertised__c = PropertyList[loopCounter].Date_Last_Advertised__c;
        PropertyId.add(prop.Id);            
        propsExist.add(prop);
    }
    System.debug('@propsExist'+propsExist);
    if(propsExist.size()>0){
        update propsExist;
        
        Property_Contacts__c propcontactNew = new Property_Contacts__c();
        for(Property_Contacts__c propcontact: [Select Id,Property__c, Contact__c from Property_Contacts__c where Property__c in: PropertyId limit 1]){ 
            Integer counter =0;           
            propertyContactListExistToUpdate.add(propcontact);
            counter++;
        }
        system.debug('@propertyContactListExistToUpdate'+propertyContactListExistToUpdate);
        if(propertyContactListExistToUpdate.size()>0){
            update propertyContactListExistToUpdate;
        }
    }
    else{
        if(PropertyList.size()>0){
            insert PropertyList;
            System.debug('@PropertyList'+PropertyList);
            
            for(Property__c p: PropertyList){
                Integer counter = 0;
                propertyContactToUpdate.Property__c = p.Id;         
                propertyContactToUpdate.Contact__c = propertyContactList[counter].Contact__c; 
                propertyContactListToUpdate.add(propertyContactToUpdate);
                    
                counter++;
            }
            
            if(propertyContactListToUpdate.size()>0){
                insert propertyContactListToUpdate;
            }
        }
        
    }
    
    List<Opportunity> OpportunityToUpdate = new List<Opportunity>();
    for(Opportunity op: [Select Id,property__c from Opportunity where Id in:OppId limit 1]){
        Integer counter = 0;
        if( PropertyList[counter].Id!=null){
            op.Property__c = PropertyList[counter].Id;
        }
        else{
            op.Property__c = propertyContactListExistToUpdate[counter].Property__c;
        }   
            
        OpportunityToUpdate.add(op);
        counter++;
    }
    System.debug('@OpportunityToUpdate'+OpportunityToUpdate);
    if(OpportunityToUpdate.size()>0){
        update OpportunityToUpdate;
    }
    
}

 
As a certified Salesforce consulting partner, PDO, and ISV, ForceBrain.com builds cloud & mobile apps. We've been a salesforce partner for over 6 years and you'll be joining a super fun team of true rockstars. We're seeking a Project Lead who will work-from-home as a full-time employee, managing 3 to 5 projects (zero travel required). This position requires managing the entire project life cycle from kickoff to go-live. You must have general salesforce expertise, the ability to lead the requirements gathering, and manage a few offshore developers.

RESPONSIBILITIES
• Manage complex development projects on-time, on-budget, and to-spec.
• Oversee developers to make sure requirements are being met and timeline is adhered to
• Identify detailed business requirements to support Salesforce.com implementation within the scope of prioritized initiatives.
• Develop comprehensive training materials and other change management collateral as appropriate for each initiative, deliver training to super users and end users as appropriate.
• Proactively audit Salesforce.com and improve configuration settings and keep current with the latest capabilities of each release.

REQUIREMENTS
• You are comfortable with speaking with clients - This position will require customer facing.
• 3+ years of Salesforce platform experience (Sales Cloud, Service Cloud, General Configuration, etc...)
• Take complex client and vendor concepts and articulate them to audiences of varying perception levels.
• Ability to lead enterprise engagements, facilitate meetings, and lead customer support projects.
• Excellent written, verbal presentation and organizational skills, ability to interface with all levels and business units.
• Must work independently in complex fast paced environment to ensure quality and timeliness of system information.

PREFERRED SKILLS
• Salesforce.com Certifications (Admin, Consultant, Developer).
• Current or past Project Management Certification (PMP or equivalent).
• Experience work with or managing an offshore team

INTERESTED?
• Send your resume to jobs(at)forcebrain.com
• Answer the questions on this form: https://docs.google.com/a/sumoscheduler.com/forms/d/1UwzGI0xCAJLoe6xaukrl7YVZKs1k2WSE5C0ce9BJReU/viewform
GENERAL STATS
• Full Time Employee
• Location: Remote, Work & Live Anywhere
• Salary with bonus and generous benefit package
• Applicant must be willing to work 8am PST - 5pm PST shift

ABOUT FORCEBRAIN.COM
• Established in 2008, ForceBrain.com manages an all-star team of Salesforce Consultants, Force.com Developers, and Technical Architects to design, develop, deploy, and support cloud & mobile solutions .
• We offer a competitive salary and benefits package, opportunity for continuous education & salesforce certifications, flexible working hours, tools for working remotely, casual dress at the office, quarterly company outings, and subsidized beverage and snack center.
• In 2010, ForceBrain.com became certified as a B-Corporation, recognizing the transparency in which we run our organization and our accountability in giving back.

Hi Team,

 

I have a requirement if Lawn and Garden field is true then the below select option needs to display.

 

 

Please help me, it is throwing variable doesnt exist.

 

private transient List<SelectOption> cacheProductFamilies = null;
    global List<SelectOption> productFamilies
    { 
        get {
            if (cacheProductFamilies==null){
                cacheProductFamilies = newSelectList(false);
                cacheProductFamilies.add(new SelectOption('CP','CP'));
                cacheProductFamilies.add(new SelectOption('Seeds','Seeds'));

  if (Account__r.Lawn_and_Garden_Agent__c==true){
                cacheProductFamilies.add(new SelectOption('Lawn and Garden','Lawn and Garden'));

}
            }
            return cacheProductFamilies;           
        }
    }
   
    global boolean readyForSearch {
        get {
            return selectedProductFamily!=null;
        }
    }

 

 

 

 

  • February 11, 2013
  • Like
  • 0
I have an xml I get from an external program. this XML holds information about multiple, unknown fields and their values.  the fields are a subset of a custom object in SF.
My question:
How can I set the value I get from the XML in the SF object? 
Limitations:
I dont' want to use a long if else/switch list
I don't want to update the code when in the future I add new fields to the SF object (the XML program will know of the new fields - and update them if needed)
 
XML example:
*The attribute : SF_Module_Name - holds the name of the SF Object member I want to set to true.
Code:
<—xml version="1.0" encoding="iso-8859-1"–>
<sale>
  <trxdata>
    <action>new</action>
  </trxdata>
  <Plugs>
    <Plug>
      <Dongle_ID__c>1576718528</Dongle_ID__c>
      <License_Expiration_Date>
      </License_Expiration_Date>
    </Plug>
  </Plugs>
  <Modules>
    <Module>
      <Dongle_ID__c></Dongle_ID__c>
      <Id>
      </Id>
      <Module_Name>OptiMark</Module_Name>
      <Module_Version>900</Module_Version>
      <SF_Module_Name>X1</SF_Module_Name>
    </Module>
    <Module>
      <Dongle_ID__c></Dongle_ID__c>
      <Id>
      </Id>
      <Module_Name>Optikk</Module_Name>
      <Module_Version>900</Module_Version>
      <SF_Module_Name>X2</SF_Module_Name>
    </Module>
    <Module>
      <Dongle_ID__c></Dongle_ID__c>
      <Id>
      </Id>
      <Module_Name>Opti33</Module_Name>
      <Module_Version>900</Module_Version>
      <SF_Module_Name>X3</SF_Module_Name>
    </Module>
  </Modules>
</sale>

 
I couldn't really figure how to use reflection on my object, since I couldnt' see how it is hashable, nor is it a mapped table.
 
Does anyone have an idea?