SelectManagers to v7.x

Collapse
X
 
  • Time
  • Show
Clear All
new posts

  • item
    commented on 's reply
    Hello telecastg,
    i try to do sample... with my github
    don't kill me, certainly many error but..

    i think my cisco call-to-click is best of the best

  • yuri
    replied
    If you use IDE, by using 'Find Usages' feature on an interface (in the documentation it's stated what interface classes should implement) to find implementation examples and a factory class (looking into a factory class can give information about all ways the class can be defined in metadata.

    Leave a comment:


  • telecastg
    commented on 's reply
    I agree, it would be a great improvement if the documentation would include code examples of actual usage of the new features that most users could understand.

    I am going to include a link t this posting at the "adapting to Espo 7 post" so other users can find it.

  • item
    replied
    Hello,
    Thanks telecastg , dimyy, I understand.. but sometime i have hard to find where find sample.


    Leave a comment:


  • telecastg
    replied
    Hello item,

    Here is how I managed to replace the deprecated SelectManagers class for our ServiceTicket entity with the new Select Builder mechanism:

    Step 1:Create custom "Select" classes for each type of filter previously defined in the SelectManager:
    BEFORE
    application/Espo/Modules/PropertyManagement/SelectManagers/ServiceTicket.php
    PHP Code:
    namespace Espo\Modules\PropertyManagement\SelectManagers;

    class 
    ServiceTicket extends \Espo\Core\SelectManagers\Base
    {
        protected function 
    boolFilterOpen(&$result)
        {
            
    $this->filterOpen($result);
        }

        protected function 
    filterOpen(&$result)
        {
            
    $result['whereClause'][] = array('status!=' => ['Completed''Canceled''Deferred''Rejected']);
        }

    AFTER
    application/Espo/Modules/PropertyManagement/Classes/Select/ServiceTicket/PrimaryFilters/Open.php
    PHP Code:
    namespace Espo\Modules\PropertyManagement\Classes\Select\ServiceTicket\PrimaryFilters;

    use 
    Espo\ORM\Query\SelectBuilder;
    use 
    Espo\ORM\Query\Part\Condition as Cond;

    use 
    Espo\Core\Select\Primary\Filter;

    class 
    Open implements Filter
    {
        public function 
    apply(SelectBuilder $queryBuilder): void
        
    {
            
    $notOpenList = ['Completed''Canceled''Deferred''Rejected'];

            
    $queryBuilder->where(
                
    Cond::notIn(
                    
    Cond::column('status'),
                    
    $notOpenList
                
    )
            );
        }

    application/Espo/Modules/PropertyManagement/Classes/Select/ServiceTicket/BoolFilters/Open.php
    PHP Code:
    namespace Espo\Modules\PropertyManagement\Classes\Select\Ser viceTicket\BoolFilters;

    use 
    Espo\Core\Select\Bool\Filter;

    use 
    Espo\ORM\Query\SelectBuilder;
    use 
    Espo\ORM\Query\Part\Where\OrGroupBuilder;
    use 
    Espo\ORM\Query\Part\Condition as Cond;

    class 
    Open implements Filter
    {
        public function 
    apply(SelectBuilder $queryBuilderOrGroupBuilder $orGroupBuilder): void
        
    {
            
    $notOpenList = ['Completed''Canceled''Deferred''Rejected'];

            
    $orGroupBuilder->add(
                
    Cond::notIn(
                    
    Cond::column('status'),
                    
    $notOpenList
                
    )
            );
        }

    Step 2:Create custom metadata script to have Espo invoke the new classes to apply filters instead of using the deprecated SelectManager definitions:
    application/Espo/Modules/PropertyManagement/Respurces/metadata/selectDefs/ServiceTicket.json
    Code:
    {
        "primaryFilterClassNameMap": {
            "open": "Espo\\Modules\\PropertyManagement\\Classes\\Selec t\\ServiceTicket\\PrimaryFilters\\Open"
        },
        "boolFilterClassNameMap": {
            "open": "Espo\\Modules\\PropertyManagement\\Classes\\Selec t\\ServiceTicket\\BoolFilters\\Open"
        }
    }
    Please note that I did this using the core "Task" entity as a guide and I only replaced one type of filter ("Open"), for other filters you might want to check these scripts: https://github.com/espocrm/espocrm/t...Classes/Select

    Best Regards
    Last edited by telecastg; 01-08-2022, 07:45 PM.

    Leave a comment:


  • dimyy
    replied
    May be core filters be the sample

    Leave a comment:


  • item
    started a topic SelectManagers to v7.x

    SelectManagers to v7.x

    Hello,

    As SelectManagers is depreciate, who can help me to adapt to v7x ?
    certainly https://docs.espocrm.com/development...a/select-defs/. but no sample :S

    Patient entity have many2many Users with a custom column "role".
    i use "assignedsUsers" because i need out-of-box assignedUser.




    PHP Code:

    <?php

    namespace Espo\Custom\SelectManagers;

    class 
    Patient extends \Espo\Core\SelectManagers\Base
    {

      protected function 
    boolFilterOnlyUsers(&$result)
      {
        
    $wherePart null;
        if (
    $this->getSeed()->hasRelation('assignedsUsers')) {
           
    $this->setDistinct(true$result);
           
    $this->addLeftJoin(['assignedsUsers''assignedsUsersOnlyMyFilter'], $result);
           
    $wherePart = [
              
    'assignedsUsersOnlyMyFilter.id' => $this->getUser()->id
          
    ];
       }

       return 
    $wherePart;
     }
    }
    Last edited by item; 01-02-2022, 10:15 PM.
Working...