{"id":16110994,"url":"https://github.com/nikiforovall/sf-mapper","last_synced_at":"2025-03-18T09:30:57.334Z","repository":{"id":122364715,"uuid":"96023677","full_name":"NikiforovAll/SF-Mapper","owner":"NikiforovAll","description":"A convention-based object-object mapper for SF :cloud:","archived":false,"fork":false,"pushed_at":"2017-08-19T16:36:03.000Z","size":61,"stargazers_count":9,"open_issues_count":1,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-28T08:33:51.253Z","etag":null,"topics":["apex","json","mapper","salesforce","sf-mapper","sobject"],"latest_commit_sha":null,"homepage":"","language":"Apex","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NikiforovAll.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-07-02T13:02:57.000Z","updated_at":"2024-06-11T05:58:46.000Z","dependencies_parsed_at":null,"dependency_job_id":"d7d0bb60-2f17-4866-b446-d744bf43d34d","html_url":"https://github.com/NikiforovAll/SF-Mapper","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NikiforovAll%2FSF-Mapper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NikiforovAll%2FSF-Mapper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NikiforovAll%2FSF-Mapper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NikiforovAll%2FSF-Mapper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NikiforovAll","download_url":"https://codeload.github.com/NikiforovAll/SF-Mapper/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243911116,"owners_count":20367632,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apex","json","mapper","salesforce","sf-mapper","sobject"],"created_at":"2024-10-09T19:40:00.490Z","updated_at":"2025-10-14T12:10:30.113Z","avatar_url":"https://github.com/NikiforovAll.png","language":"Apex","funding_links":[],"categories":[],"sub_categories":[],"readme":"SF Mapper\n[![Build Status](https://travis-ci.org/NikiforovAll/SF-Mapper.svg?branch=master)](https://travis-ci.org/NikiforovAll/SF-Mapper)\n==========================\n### [What is SF Mapper?](https://github.com/NikiforovAll/SF-Mapper/wiki)\n\nSF Mapper is a simple library build to solve really common problem - getting rid of code that mapped one source object to another sobjects. This type of code is very often mixed with business logic which makes testing and maintaining boring. So why not provide tool to manage this commonplace problem?\n\n### How do I get started?\nFirst, configure SF Mapper. You do it by specifying IFieldMapping object. For example, in listing below we create Account and Contact from Lead.\n```java\nSObjectMapper.initialize('Lead',\n    new FieldMapping(\n        //object mapping \n        new Map\u003cString, Set\u003cString\u003e\u003e{\n            'Account' =\u003e new Set\u003cString\u003e{'phone', 'company'},\n            'Contact' =\u003e new Set\u003cString\u003e{'email', 'city'}\n        },\n        //field mapping\n        new Map\u003cString, String\u003e{\n            'company' =\u003e 'name',\n            'city' =\u003e 'mailingcity',\n            'phone' =\u003e 'phone',\n            'email' =\u003e 'email'\n        }\n    )\n);\n```\nNote, FieldMapping is *case-sensitive*. So it's probably better idea to use MapperConfigBuilder, that provides fluent interface to build FieldMapping. \nSimilar to the code above:\n```java\nSObjectMapper.initialize(\n    new MapperConfigBuilder('Lead')\n        .addObjectMapping('Account', new List\u003cString\u003e{'Phone', 'Company'})\n        .addObjectMapping('Contact', new List\u003cString\u003e{'Email', 'City'})\n        .addFieldMapping('Company', 'Name')\n        .addFieldMapping('City', 'MailingCity')\n        .addFieldMapping('Phone', 'Phone')\n        .addFieldMapping('Email', 'Email')\n);\n// OR \nSObjectMapper.initialize(\n    new MapperConfigBuilder('Lead')\n        .addObjectMapping('Account', '*') // default mapping object\n        .addObjectMapping('Contact', new List\u003cString\u003e{'Email', 'City'})\n        .addFieldMapping('Company', 'Name')\n        .addFieldMapping('City', 'MailingCity')\n        .addFieldMapping('Phone', 'Phone')\n        .addFieldMapping('Email', 'Email')\n);\n// OR (If you want add field formatting, please see wiki for details)\nSObjectMapper.initialize(\n    new MapperConfigBuilder('Lead')\n        .addObjectMapping('Account', '*') // default mapping object\n        .addObjectMapping('Contact', new List\u003cString\u003e{'Email', 'City'})\n        .addFieldMapping(new FieldMappingRule('Company','Name', 'Account', new MyCustomIFieldFormatter()))\n        .addFieldMapping('City', 'MailingCity')\n);\n```\nThen in your application code, execute the mappings:\n```java\nMap\u003cString, sObject\u003e result = SObjectMapper.mapObject(lead);\n// OR \nMap\u003cString, sObject\u003e result = SObjectMapper.mapObject(\n    // anything that implements IResourceProvider (e.g SObjectResourceProvider, JsonResourceProvider)\n    new SObjectResourceProvider(lead)\n);\n// OR \nMap\u003cString, sObject\u003e result = SObjectMapper.mapObject(\n    new SObjectResourceProvider(lead, 'Lead') // scheme name\n);\n```\nAlso, you can map json to SObjects. \n**For more details please see**: [getting started guide](https://github.com/NikiforovAll/SF-Mapper/wiki/Getting-started).\n### What can I map?\nYou can take as initial resource pretty much everything that implements *IResourceProviderInterface*. \nBut SObject to SObjects and JSON to SObjects supported out of the box.  \n### Where can I get it?\nYou can use awesome sf deployment tool [githubsfdeploy](https://github.com/afawcett/githubsfdeploy).\n\n\u003ca href=\"https://githubsfdeploy.herokuapp.com?owner=NikiforovAll\u0026repo=SF-Mapper\"\u003e\n  \u003cimg alt=\"Deploy to Salesforce\"\n       src=\"https://raw.githubusercontent.com/afawcett/githubsfdeploy/master/src/main/webapp/resources/img/deploy.png\"\u003e\n\u003c/a\u003e\n\n### Issues? \nFeel free to [ask](https://github.com/NikiforovAll/SF-Mapper/issues).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnikiforovall%2Fsf-mapper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnikiforovall%2Fsf-mapper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnikiforovall%2Fsf-mapper/lists"}